2011-02-15 105 views
1

我知道我们可以在任何简单的方式使用这些语法匿名类型的语法

var r = new MyType { name = "dd"} 

是否有可能有这样的语法

MyType myType = GetMyType("some method returns instance of mytype"){ 
     name="myname", 
     otherProp = otherPro, 
     ExecuteMyTypeMethod() 
    }; 

回答

2

请注意,你已经证明是不匿名类型如下:

var r = new { name = "dd" }; // Note the lack of a type name 

这是obje ct初始化程序语法 - 不,它只适用于构造函数。我偶尔也发现了一种痛苦,但事实就是如此。

编辑:建议使用扩展方法的评论。您可以此:

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

在这一点上,你可以写:

MyType myType = GetMyType("some method returns instance of mytype").With(t => { 
    t.name="myname"; 
    t.otherProp = otherPro; 
    t.ExecuteMyTypeMethod(); 
}); 

这样做的唯一好处是,您仍然可以在一个单一的表达研究进行初始化。通常我宁愿使用单独的语句。

+0

任何使用扩展方法有这样的语法吗? – hungryMind 2011-02-15 11:10:52