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

时间:2015-07-12 22:18:21

标签: c# dictionary

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

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

我想做类似的事情:

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

变量1是什么并不重要。它可以是一个字符串,用于存储&#39; string&#39;或&#39; int&#39;作为价值。我也可以使用variable1.getType()来确定类型。无论哪种方式都适合我。但我上面做的方式,嗯,这是不正确的。必须有另一种方法来根据变量设置键和值类型......对吗?

有些东西只是射入我的脑袋,如果要检查类型是什么,并根据类型使字典使用该类型。但是随着类型的数量,它会变得很多,我觉得必须有更好的方法。

搜索对我没什么帮助。好吧,我学到了一些其他的东西,但没有解决我的问题。在每一个案例中,都手动设置了字典TKeyTValue。虽然我想设置它们,但是我从某个来源获取了一个变量。

3 个答案:

答案 0 :(得分:4)

  

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

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

ui->swPPU->addWidget(ppu);

然后,您可以将其与public static Dictionary<K, V> CreateDictionaryFor<K, V>(K key, V value) { return new Dictionary<K, V>(); } variable1

一起使用
variable2

答案 1 :(得分:1)

您可以尝试Dictionary<object, object>

这样你可以传递你需要通过的任何东西,并根据需要检查类型。

var dict = new Dictionary<object, object>();

dict.Add(45, "dkd");

答案 2 :(得分:1)

可能性是将字典封装在新类中,并通过通用方法创建字典:

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;
        }
    }
}

当然上面的代码需要一些改进(添加错误类型时没有例外,实现你需要的字典方法的其他方法),但这个想法应该是明确的。