获取类成员的默认值

时间:2010-06-07 13:54:30

标签: c# default member

我们假设我有一个ClassWithMember类

class ClassWithMember
{
    int myIntMember = 10;
}

如何通过System.Type获取myIntMember成员的默认值10?

我目前正在努力解决所有我的反思是int(0)的默认值而不是类默认成员(10)..

4 个答案:

答案 0 :(得分:5)

您可以尝试这样的事情:

var field = typeof(ClassWithMember).GetField("myIntMember",
    BindingFlags.Instance | BindingFlags.NonPublic);
var value = (int)field.GetValue(new ClassWithMember());

这里的技巧是实例化一个实例。

答案 1 :(得分:3)

尝试创建实例并使用反射检索值。

答案 2 :(得分:2)

如果您控制ClassWithMember的代码,则可以使用[DefaultValue]中的System.ComponentModel属性采用完全不同的方法。基本上,你要做的就是这样写:

class ClassWithMember
{
    public ClassWithMember()
    {
        SetDefaultValues();
    }

    [DefaultValue(5)]
    public MyIntMember { get; set; }
}

然后在某个地方有一个这样的函数,也许在基类中:

public void SetDefaultValues()
{
    foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(this))
    {
        DefaultValueAttribute a = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute;
        if (a == null) 
            continue;
        prop.SetValue(this, a.Value);
    }
}

现在,您可以使用Reflection轻松检索默认值。

请记住,由于Reflection要求,这将会非常慢,因此如果此代码经过实例化很多,您可能希望找到不同的方法。此外,由于.NET Framework的属性支持限制,它不适用于非值类型。

答案 3 :(得分:0)

您仍然可以使用Activator.CreateInstance创建MonoBehaviour / ScriptableObject并检查其值(如果仅仅是为了检查默认值)。确保随后使用DestroyImmediate;-)