我有以下设置:
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>
方法{my}}已经做了我需要告诉我的,如果这两个方法不同:)
答案 0 :(得分:2)
我假设你在其他地方做SyncField<Entity>
。
SyncField<T>
{
T O { get; private set; }
T V { get; private set; }
public bool HasChanged
{
get
{
if (V != null && O != null && O is ICollection)
{
return ((ICollection)O).Count != ((ICollection)V).Count;
}
else
{
return O != null && !O.Equals(V);
}
}
}
}