我不确定这是否可能,但我有几个不同值类型的字典。
public Dictionary<int, Type1> type1;
public Dictionary<int, Type2> type2;
我希望能够使用泛型来获取特定类型的对象。
public T Get<T>(int ID)
{
// somehow find the correct dictionary and return its value
}
我可以使用 switch 语句,但是有更聪明的方法吗?
如果这些字段是与
Get
方法位于同一类中的类字段,则可以尝试使用反射。
实现示例:
public class TestArea
{
public Dictionary<int, Type1> type1 = new Dictionary<int, Type1> { { 1, new Type1() } };
public Dictionary<int, Type2> type2 = new Dictionary<int, Type2> { { 1, new Type2() } };
public T Get<T>(int ID)
{
// somehow find the correct dictionary and return its value
var dictionaryType = typeof(Dictionary<int, T>);
var dictionaryProperty = GetType().GetFields()
.Where(x => x.FieldType == dictionaryType)
.FirstOrDefault();
if (dictionaryProperty is null) throw new Exception("No dictionary found!");
var dictionary = (Dictionary<int, T>)dictionaryProperty.GetValue(this);
return dictionary[ID];
}
}