获取字段的类型(无实例)

问题描述:

我可以获取字段的类型吗? Type.GetType();只返回一个实例的类型,所以如果字段设置为null我不能得到类型。获取字段的类型(无实例)

注意:我宁愿不使用反射〜

+0

null不是一个类型..它的值。无论如何,该字段仍然是相同的类型。你应该事先检查null。 –

根据上下文GetPropertyPropertyType可以为你工作。即如果您有对象类型和属性名称:

var typeOfLength = typeof(String).GetProperty("Length").PropertyType; 

您不清楚在字段为空时是否只需编译时类型。这样一个简单的方法可以工作:

public static class ReflectionExtensions 
{ 
    public static Type GetCompileTimeType<T>(this T obj) 
    { 
     return typeof(T); 
    } 
} 

您可以修改它,它检查空和返回实际的类型,如果这是你想要的。

用法:

class A { } 
class B : A { } 

class C 
{ 
    private A a1, a2; 
    public C() 
    { 
     a2 = new B(); 
     Console.WriteLine(a1.GetCompileTimeType()); // null but prints A 
     Console.WriteLine(a2.GetCompileTimeType()); // actually a B but prints A 
    } 
} 

public class test 
{ 
    private int fTestInt; 
    private string fTestString; 
} 

可以实现通过键入fTestInt.GetType()获得字段类型。

如果您想要使用快速类型验证。不知道这是不是你问的。你的问题似乎部分。

为什么不直接问是否为空?

if (Type != null) 
{ 
    return Type.GetType().Name; 
} 
else 
{ 
    return ""; 
}