2011-02-15 107 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