用变量设置字典键和值类型

本文关键字:键和值 类型 字典 设置 变量 | 更新日期: 2023-09-27 18:02:16

我目前正在努力创建一个字典。我想创建它,以便它可以在多种情况下使用。但是,这些情况因键和值类型而异。所以当你通常这样做的时候:

Dictionary<int, string> Something = new Dictionary<int, string>();

我想这样做:

Dictionary<variable1, variable2> ..............

变量1是什么并不重要。它可以是一个字符串,存储'string'或'int'作为值。我还可以使用variable1.getType()来确定类型。两种方法都适合我。但是我上面做的方法,是不正确的。必须有另一种方法来设置基于变量的键和值类型…对吧?

我突然想到,用if's来检查类型是什么,并根据类型使字典使用该类型。但是有这么多类型,就会有很多if,我觉得一定有更好的方法。

搜索对我帮助不大。我学到了一些其他的东西,但没有解决我的问题。在每种情况下,字典TKeyTValue都是手动设置的。当我想设置它们时,我从某个源获取一个变量

用变量设置字典键和值类型

必须有另一种方法来设置键和值类型变量……对吧?

是的,有。您可以创建一个帮助器方法来创建字典,例如:

public static Dictionary<K, V> CreateDictionaryFor<K, V>(K key, V value)
{
    return new Dictionary<K, V>();
}

然后,您可以使用它与variable1variable2:

var dictionary = CreateDictionaryFor(variable1, variable2);

你可以试试Dictionary<object, object>

这样你就可以传递任何你需要传递的信息,并根据需要检查类型。

var dict = new Dictionary<object, object>();
dict.Add(45, "dkd");

一种可能性是将字典封装在一个新类中,并通过泛型方法创建字典:

public class GenericDictionary
{
    private IDictionary m_dictionary;
    public bool Add<TA, TB>(TA key, TB value)
    {
        try
        {
            if (m_dictionary == null)
            {
                m_dictionary = new Dictionary<TA, TB>();
            }
            //check types before adding, instead of using try/catch
            m_dictionary.Add(key, value);
            return true;
        }
        catch (Exception)
        {
            //wrong types were added to an existing dictionary
            return false;
        }
    }
}

当然,上面的代码需要一些改进(添加错误类型时也不例外,添加实现您需要的字典方法的其他方法),但是思想应该是清晰的。