2
比方說,我有以下的通用類:不能匿名類型傳遞給通用構造
public class Control<TItem>
{
public Control(TItem item)
{
}
}
當我嘗試匿名類型的對象傳遞給構造函數,編譯失敗:
var objectOfAnonymousType = new { Foo = "bar" };
// cannot compile:
var control1 = new Control(objectOfAnonymousType);
但是,如果我這樣做不是通過構造函數,而是通過類以外的一般方法,似乎工作:
// can compile:
var control2 = CreateControl(objectOfAnonymousType);
使用 工廠方法:
static Control<TItem> CreateControl<TItem>(TItem item)
{
return new Control<TItem>(item);
}
我無法理解這種限制背後的原因。任何人都可以解釋?
http://stackoverflow.com/questions/45604/why-doesnt-c-sharp-support-implied-generic-types-on-class-constructors,http://stackoverflow.com/questions/280172/create -generic-class-instance-based-on-anonymous-type,http://stackoverflow.com/questions/3570167/why-cant-the-c-sharp-constructor-infer-type – CodeCaster
你得到的錯誤信息應該是對於問題的具體描述。 – Servy
這實際上與匿名類型完全無關。這也不適用於常規類類型,因爲構造函數不支持泛型類型推斷。查看@servy的答案。 – Kyle