确定反射属性是否可以分配给定值的最简单方法是什么?确定是否可以为给定值分配反射属性
的什么,我需要的方法签名是:
public static bool IsAssignable(PropertyInfo property, object value)
{
throw new NotImplementedException();
}
这种方法应该值类型和引用类型和weither值为空或无法正常工作。
感谢您帮助球员。
Manitra。
确定反射属性是否可以分配给定值的最简单方法是什么?确定是否可以为给定值分配反射属性
的什么,我需要的方法签名是:
public static bool IsAssignable(PropertyInfo property, object value)
{
throw new NotImplementedException();
}
这种方法应该值类型和引用类型和weither值为空或无法正常工作。
感谢您帮助球员。
Manitra。
感谢Stefan的和约翰的反应,以及“确定是否反射属性可以赋值为null”的问题,这里是我的代码将使用:
public static bool IsAssignable(PropertyInfo property, object value)
{
if (value == null && property.PropertyType.IsValueType && Nullable.GetUnderlyingType(property.PropertyType) == null)
return false;
if (value != null && !property.PropertyType.IsAssignableFrom(value.GetType()))
return false;
return true;
}
这适用于所有情况下和纯松散类型的时尚。
Manitra。
您可能正在寻找Type.IsAssignableFrom
你不能确定这是为object
传递的null
类型。你只能说,如果该物业能够采取null
。
你可以采取的编译时类型出于这个原因:
public static bool IsAssignable<T>(PropertyInfo property, T value)
{
if (value != null)
{
return property.PropertyType.IsAssignableFrom(value.GetType());
}
return property.PropertyType.IsAssignableFrom(typeof(T));
}
感谢您的回答,在强类型用例(upvoted)中是正确的。在我的情况下,我真的有一个对象作为值,所以我不能使用typeof(T)。但是,实际上,我发现了一个类似的问题,它处理一个空值,所以没关系。 – 2011-03-08 14:40:35
好的,谢谢。但是,如果该值为空,我不能不能调用它的GetType()? – 2011-03-08 14:05:58