[英]C# Reflection: Retrieve Static Objects From a Class
我的意图是拥有一个类T,该类具有自己类型的几个静态只读实例。 我现在想要做的是创建一个通用方法,该方法将识别所有这些实例并将它们添加到列表中。 到目前为止,我可以找到所有元素,并且FieldInfo.FieldHandle.Value似乎包含该对象,但是我对获取它仍然不熟练。 也许使用FieldInfo是错误的。 有人可以帮我吗?
(谢谢!)这是代码示例(已应用解决方案):
using System;
using System.Collections.Generic;
using System.Reflection;
namespace PickStatic {
class Fruit {
public static readonly Fruit Orange = new Fruit("Orange");
public static readonly Fruit Kiwi = new Fruit("Kiwi");
public static readonly Fruit Pear = new Fruit("Pear");
public string name { set; get; }
public Fruit(string name) {
this.name = name;
}
public static List<T> getAll<T>() where T : class {
List<T> result = new List<T>();
MemberInfo[] members = typeof(T).GetMembers();
foreach(MemberInfo member in members) {
if(member is FieldInfo) {
FieldInfo field = (FieldInfo) member;
if(field.FieldType == typeof(T)) {
T t = (T) field.GetValue(null);
result.Add(t);
}
}
}
return result;
}
public static void Main(string[] args) {
List<Fruit> fruits = getAll<Fruit>();
foreach(Fruit fruit in fruits) {
Console.WriteLine("Loaded: {0}", fruit.name);
}
Console.ReadLine();
}
}
}
水果类包含三个水果类型的静态对象。 正在尝试使用泛型方法获取所有此类对象的列表。
您需要使用FieldInfo.GetValue方法 。
使用null
调用它(因为它是一个静态字段)
编辑 :不建议在代码的“关键”部分中使用反射(就性能而言),您可以使用字典来缓存从GetAll
方法返回的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.