我目前正在努力创建一本字典。我想创建它,以便它可以在多种情况下使用。但是,这些情况因键和值类型而异。所以,虽然你通常这样做:
Dictionary<int, string> Something = new Dictionary<int, string>();
我想做类似的事情:
Dictionary<variable1, variable2> ..............
变量1是什么并不重要。它可以是一个字符串,用于存储&#39; string&#39;或&#39; int&#39;作为价值。我也可以使用variable1.getType()来确定类型。无论哪种方式都适合我。但我上面做的方式,嗯,这是不正确的。必须有另一种方法来根据变量设置键和值类型......对吗?
有些东西只是射入我的脑袋,如果要检查类型是什么,并根据类型使字典使用该类型。但是随着类型的数量,它会变得很多,我觉得必须有更好的方法。
搜索对我没什么帮助。好吧,我学到了一些其他的东西,但没有解决我的问题。在每一个案例中,都手动设置了字典TKey
和TValue
。虽然我想设置它们,但是我从某个来源获取了一个变量。
答案 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;
}
}
}
当然上面的代码需要一些改进(添加错误类型时没有例外,实现你需要的字典方法的其他方法),但这个想法应该是明确的。