私は次の設定をしています:
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つが異なる場合に私に伝える必要があることをすでに実行しているため:)