我有以下設置:無法將派生類型轉換爲基類型?
struct Item { }
class Entry : List<Item> { }
泛型類
,在那裏我通過Entry
類型的參數,我試圖讓List<Item>.Count
。
我曾嘗試以下不已:
var c = typeof(T).GetProperty("Count").GetMethod.Invoke(X, new object[]{}); // x is the variable in the generic class of type T!
我也嘗試
var c = (x as ICollection).Count;
// throws Cannot cast '((Entry)X)' (which has an actual type of 'Entry') to 'System.Collections.Generic.List<Item>'
現在我真的不知道如何讓伯爵:(
代碼泛型類:這個想法是有一個記錄特定起始值的字段,然後在已經改變的情況下給出反饋。
SyncField<T>
{
T O { get; private set; }
T V { get; private set; }
public bool HasChanged
{
get
{
if (V != null && O != null)
{
var func = typeof(T).GetProperty("Count");
if (func != null)
{
var oc = func.GetMethod.Invoke(O, new object[] { });
var vc = func.GetMethod.Invoke(V, new object[] { });
return oc != vc; // here i am trying to simply do ICollection.Count != ICollection.Count
}
}
return O != null && !O.Equals(V);
}
}
}
更新: 我解決這個:
public bool HasChanged
{
get { return return O != null && !O.Equals(V); }
}
爲什麼?因爲Equals()
方法List<T>
已經做了我需要告訴我,如果這些2是不同的:)
爲什麼你首先使用反射?如果這個項目是一個'Entry'或者它的任何子類型,那麼你可以調用'Count'來完成。 – Servy 2013-03-21 17:49:13
設計模式:贊成繼承類繼承的對象組合,爲什麼會從它中派生出來,而不是將列表作爲成員包含在內? – David 2013-03-21 17:50:45
請顯示一個簡短但完整的示例來說明問題。 (然後按照建議考慮重新設計。) – 2013-03-21 17:51:52