下面是我用来获取IsDirty检查的类中所有公共属性的初始状态的一些代码.
查看属性是否为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);
}
Run Code Online (Sandbox Code Playgroud)
我最后做的是添加一些库扩展,如下所示
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);
}
Run Code Online (Sandbox Code Playgroud)
Fyo*_*kin 62
if ( typeof( IEnumerable ).IsAssignableFrom( pi.PropertyType ) )
Run Code Online (Sandbox Code Playgroud)
sst*_*oss 13
我同意Fyodor Soikin,但是Enumerable的事实并不意味着它只是一个集合,因为字符串也是Enumerable并且逐个返回字符......
所以我建议使用
if (typeof(ICollection<>).IsAssignableFrom(pi.PropertyType))
Run Code Online (Sandbox Code Playgroud)
尝试
private bool IsEnumerable(PropertyInfo pi)
{
return pi.PropertyType.IsSubclassOf(typeof(IEnumerable));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25257 次 |
| 最近记录: |