如何通过反射区分值类型、可空值类型、枚举、可空枚举、引用类型?
enum MyEnum
{
One,
Two,
Three
}
class MyClass
{
public int IntegerProp { get; set; }
public int? NullableIntegerProp { get; set; }
public MyEnum EnumProp { get; set; }
public MyEnum? NullableEnumProp { get; set; }
public MyClass ReferenceProp { get; set; }
}
class Program
{
static void Main(string[] args)
{
Type classType = typeof(MyClass);
PropertyInfo propInfoOne = classType.GetProperty("IntegerProp");
PropertyInfo propInfoTwo = classType.GetProperty("NullableIntegerProp");
PropertyInfo propInfoThree = classType.GetProperty("EnumProp");
PropertyInfo propInfoFour = classType.GetProperty("NullableEnumProp");
PropertyInfo propInfoFive = classType.GetProperty("ReferenceProp");
propInfoOne.???
...............
...............
}
}
在 propInfo...s 中的什么地方可以检索到这些信息?
最佳答案
这是检查枚举、可为空、原始和值类型的方法;
Console.WriteLine(propInfoOne.PropertyType.IsPrimitive); //true
Console.WriteLine(propInfoOne.PropertyType.IsValueType); //false, value types are structs
Console.WriteLine(propInfoThree.PropertyType.IsEnum); //true
var nullableType = typeof (Nullable<>).MakeGenericType(propInfoThree.PropertyType);
Console.WriteLine(nullableType.IsAssignableFrom(propInfoThree.PropertyType)); //true
请注意,值类型和基元是不同的东西。基元只是映射到类型的简写(例如 bool > System.Boolean)。值类型按值传递;它们是结构(ure)而不是类。
关于c# - 如何通过反射区分值类型、可空值类型、枚举、可空枚举、引用类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8614624/