从各种列表中返回泛型类型

问题描述 投票:0回答:1

我不确定这是否可能,但我有几个不同值类型的字典。

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 语句,但是有更聪明的方法吗?

c# dictionary generics
1个回答
0
投票

如果这些字段是与

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];
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.