用变量设置字典键和值类型
本文关键字:键和值 类型 字典 设置 变量 | 更新日期: 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,我觉得一定有更好的方法。
搜索对我帮助不大。我学到了一些其他的东西,但没有解决我的问题。在每种情况下,字典TKey
和TValue
都是手动设置的。当我想设置它们时,我从某个源获取一个变量
必须有另一种方法来设置键和值类型变量……对吧?
是的,有。您可以创建一个帮助器方法来创建字典,例如:
public static Dictionary<K, V> CreateDictionaryFor<K, V>(K key, V value)
{
return new Dictionary<K, V>();
}
然后,您可以使用它与variable1
和variable2
:
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;
}
}
}
当然,上面的代码需要一些改进(添加错误类型时也不例外,添加实现您需要的字典方法的其他方法),但是思想应该是清晰的。