2011-03-08 65 views
0

确定反射属性是否可以分配给定值的最简单方法是什么?确定是否可以为给定值分配反射属性

的什么,我需要的方法签名是:

public static bool IsAssignable(PropertyInfo property, object value) 
{   
    throw new NotImplementedException(); 
} 

这种方法应该值类型和引用类型和weither值为空或无法正常工作。

感谢您帮助球员。

Manitra。

回答

1

感谢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。

3

您可能正在寻找Type.IsAssignableFrom

+0

好的,谢谢。但是,如果该值为空,我不能不能调用它的GetType()? – 2011-03-08 14:05:58

2

你不能确定这是为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)); 
} 
+0

感谢您的回答,在强类型用例(upvoted)中是正确的。在我的情况下,我真的有一个对象作为值,所以我不能使用typeof(T)。但是,实际上,我发现了一个类似的问题,它处理一个空值,所以没关系。 – 2011-03-08 14:40:35

相关问题