代码之家  ›  专栏  ›  技术社区  ›  cllpse

用C语言实现VB中的语句#

  •  1
  • cllpse  · 技术社区  · 14 年前

    如何创建一个扩展方法,使我能够执行以下操作( 警告:exteme伪代码 )...

    class FooBar
    {
        Int32 Foo { get; set; }
        String Bar { get; set; }
    }
    
    new FooBar().With(fb => new Func<FooBar, Object>(instance =>
    {
        // VB With magic
        // NOTE: The instance parameter HAS to be by reference
        instance.Foo = 10;
        instance.Bar;
    
        return new Object();
    }));
    

    如果您可以指定不带返回类型(void)的匿名函数,那么上面的内容看起来会更简洁。。。

    new FooBar().With(fb => new Func<FooBar, void>(instance =>
    {
        instance.Foo = 10;
        instance.Bar;
    }));
    

    5 回复  |  直到 14 年前
        1
  •  2
  •   TcKs    14 年前

    new FooBar().With( fb=> {
        fb.Foo = 10;
        fb.Bar = fb.Foo.ToString();
    } );
    
    // ... somewhere else ...
    public static void With<T>( this T target, Action<T> action ) {
        action( target );
    }
    
        2
  •  4
  •   Fredrik Mörk    14 年前

    要指定不带返回类型的匿名方法,请使用 Action<T> Func<T, TResult> :

    new FooBar().With(new Action<FooBar>(instance =>
    {
        instance.Foo = 10;
        instance.Bar;
    }));
    

    更新

    扩展方法:

    public static void With<T>(this T input, Action<T> action)
    {
        action(input);
    }
    

    new FooBar().With(fb =>
    {
        fb.Foo = 10;
        fb.Bar = "some string";
    });
    

    Action<FooBar>

    new FooBar().With<FooBar>(new Action<FooBar>(fb =>
    {
        fb.Foo = 10;
        fb.Bar = "some string";
    }));
    
        3
  •  2
  •   Jamiec    14 年前

    当您询问如何编写扩展名时,这里是

    public static void With<T>(this T target, Action<T> action) where T : class
    {
       action(target);
    }
    

        4
  •  1
  •   Paul Hadfield    14 年前

    就这样怎么样

    return new FooBar{ Foo=10; };