我试图列出具有特定属性的所有字段,但仍不太了解GetValue()
期望的对象类型。
[AttributeUsage(AttributeTargets.Field, AllowMultiple = true)]
class SerializedAttribute : Attribute
{
}
class Program
{
[Serialized] public Single AFloat = 100.0f;
[Serialized] public Single AnotherFloat = 125.5f;
[Serialized] public Single OnceAgain = 75.0f;
static void Main(string[] args)
{
foreach(FieldInfo field in typeof(Program).GetFields())
{
foreach(Attribute attr in field.GetCustomAttributes())
{
if (attr is SerializedAttribute)
{
Console.WriteLine("\t" + "Variable name: " + field.Name + "\t" + "Variable value:" + field.GetValue(/*"??????????????"*/));
}
}
}
Console.ReadKey();
}
}
我尝试了很少的Google搜索,但显然我不是很擅长解决问题。
答案 0 :(得分:1)
GetValue
需要Program
var program = new Program();
foreach (FieldInfo field in typeof(Program).GetFields())
{
foreach (Attribute attr in field.GetCustomAttributes())
{
if (attr is SerializedAttribute)
{
Console.WriteLine("\t" + "Variable name: " + field.Name +
"\t" + "Variable value:" + field.GetValue(program));
}
}
}
也许您打算将这些属性设为static
,在这种情况下,您需要将null
传递给GetValue
。尽管由于您正在寻找SerializedAttribute
,所以情况似乎并非如此。
答案 1 :(得分:1)
如果您有课程:
public class MyClass
{
.. fields ..
}
然后您做
:foreach (FieldInfo field in typeof( >> MyClass << ).GetFields()) ...
您可以访问该类型的元数据(字段信息)。
然后,如果要从特定字段中获取一些数据,则需要将MyClass
实例传递给GetValue(..)
方法。因为我需要数据源。
如果字段为static
,则表示它不是MyClass
实例的一部分,因此您只需传递null
值。
所以最后您应该这样做:
var instance = new MyClass();
var value = field.GeValue(instance);