获取类成员的默认值

我们假设我有一个ClassWithMember类

class ClassWithMember { int myIntMember = 10; } 

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

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

你可以尝试这样的事情:

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

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

尝试创建一个实例,用reflection来检索值。

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

 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的属性支持的限制,它不适用于非值类型。

您仍然可以使用Activator.CreateInstance创建MonoBehaviour / ScriptableObject并检查其值,如果它只是为了检查默认值。 确保之后使用DestroyImmediate 😉