2017-03-14 50 views
1

我有以下類:無法隱式轉換類型「T」到「對象」

public class TestClass 
{ 
    public IEnumerable<Expression<Func<object, object>>> TestField { get; set; } 
} 

我試圖創建一個TestClass的對象是這樣的:

new TestClass 
{ 
    TestField = new Expression<Func<OtherClass, object>>[] 
    { 
     otherClass => otherClass.FieldX, 
     otherClass => otherClass.FieldY 
    } 
} 

,但我得到以下智能感知錯誤: 無法隱式轉換類型「OtherClass」到「對象」

我怎樣讓我的實現這個定義通用的,因此我可以創建具有例如TestClass對象OtherClassAnotherClass,或者任何其它類?

+2

你爲什麼不使'TestClass'泛型? –

+1

'新表達> [] {otherClass =>((OtherClass)otherClass).FieldX,otherClass =>((OtherClass)otherClass).FieldY}' – PetSerAl

+1

「,但我得到以下智能感知錯誤:不能隱式地將類型'OtherClass'轉換爲'object'「 - 真的嗎?這聽起來不對。你確定你沒有收到更長的錯誤信息嗎? – hvd

回答

0

喜歡這個?

new TestClass 
{ 
    TestField = new Expression<Func<object, object>>[] 
    { 
      otherClass => ((OtherClass)otherClass).FieldX, 
      otherClass => ((OtherClass)otherClass).FieldY 
    } 
}; 
2

您無法將一種類型的泛型類轉換爲派生類型的泛型類。僅僅因爲類的泛型通過繼承來連接並不意味着類本身就是。例如,你可以不投List<Apple>List<Fruit>,因爲據該程序而言,這兩個名單是完全不同的類。

在你的情況,你可以通過TestClass本身的通用解決您的仿製藥的問題:

public class TestClass<T> 
{ 
    public IEnumerable<Expression<Func<T, object>>> TestField { get; set; } 
} 

然後你就可以創建TestClass一個實例,像這樣:

new TestClass<OtherClass> 
{ 
    TestField = new Expression<Func<OtherClass, object>>[] 
    { 
     otherClass => otherClass.FieldX, 
     otherClass => otherClass.FieldY 
    } 
} 
相關問題