4
鑑於以下類:Lambda表達式類型推斷在繼承鏈中是不同的。爲什麼?
public class Class1<TObject> {
protected void MethodA<TType>(Expression<Func<TObject, TType>> property, ref TType store, TType value) {
}
}
public class Class2<TObject> : Class1<Class2<TObject>>{
private int _propertyInt;
public int PropertyInt {
get { return _propertyInt; }
set { MethodA(c2 => c2.PropertyInt, ref _propertyInt, value); }
}
}
public class Class3 : Class2<Class3> {
private float _propertyFloat;
public float PropertyFloat {
get { return _propertyFloat; }
set { MethodA(c3 => c3.PropertyFloat, ref _propertyFloat, value); }
}
}
對於等級2的C#編譯器推斷通用類型中的「PropertyInt」屬性setter lambda表達式基類的,但對於Class3的編譯器推斷的基類,不只是基類的泛型類型。爲什麼是這樣?代碼示例中推斷類型的標準是什麼。謝謝。
嗯,你完全正確,Chris,TObject類型(在Class1中)永遠是Class2,無論鏈條多深。現在,我在世界上怎麼會想念這個?不幸的是,你的解決方案不適用於我的情況,因爲它意味着Class3將不再繼承Class2的屬性。最簡單的解決方案是將C3投射爲「Class3」。我的問題是關於我認爲推論的不一致,但正如你所指出的那樣,它並不矛盾。 – 2011-06-02 02:26:15
請參閱上面的編輯,瞭解可能有所幫助的備用解決方案。 – 2011-06-02 02:41:13