下面是我用於獲取IsDirty檢查類中所有公共屬性的初始狀態的一些代碼。如何知道PropertyInfo是否是一個集合
查看屬性是IEnumerable的最簡單方法是什麼?
乾杯,
Berryl
protected virtual Dictionary<string, object> _GetPropertyValues()
{
return _getPublicPropertiesWithSetters()
.ToDictionary(pi => pi.Name, pi => pi.GetValue(this, null));
}
private IEnumerable<PropertyInfo> _getPublicPropertiesWithSetters()
{
return GetType().GetProperties().Where(pi => pi.CanWrite);
}
UPDATE
我傷口什麼事做是增加了一些庫擴展如下
public static bool IsNonStringEnumerable(this PropertyInfo pi) {
return pi != null && pi.PropertyType.IsNonStringEnumerable();
}
public static bool IsNonStringEnumerable(this object instance) {
return instance != null && instance.GetType().IsNonStringEnumerable();
}
public static bool IsNonStringEnumerable(this Type type) {
if (type == null || type == typeof(string))
return false;
return typeof(IEnumerable).IsAssignableFrom(type);
}
注意,String是一個IEnumerable太 – 2013-11-11 19:06:50
它解決了 http://stackoverflow.com/a/40376537/5996253 – 2016-11-02 09:35:12