我不断在代码中碰到的问题看起来像这样,
public Dictionary<string, int> NumericProperties { get; set; }
public Dictionary<string, string> TextProperties { get; set; }
public Dictionary<string, string[]> CollectionProperties { get; set; }
public Dictionary<string, KeyValue[]> DependencyProperties { get; set; }
public T GetProperty<T>(string name)
{
//find out which property dictionary and return value
}
在C#中是否有一种有效的方法?我的另一种想法是创建一个Dictionary
类型的<string, object>
并使用它(我知道我也可以使用generic
Dictionary
类型),然后返回对象可能是Pattern Matched
来查找其原始类型,这只是一个简单的情况。
此选项的问题是变量boxing
和un-boxing
以及失去其通用性。我的另一种选择是为Property
创建一个抽象基类,但是由于每个属性都将由一个名称-值对组成,因此将再次需要generics
,我们陷入了试图返回不同值的同一问题Types
动态地。
任何帮助将不胜感激!谢谢。
答案 0 :(得分:0)
您可以创建可用字典的字典。手动初始化已知的字典类型,或者让它自动执行SetProperty
方法。
public static Dictionary<Type, object> PropertDicts { get; } = new Dictionary<Type, object>();
public static void SetProperty<T>(string name, T value)
{
Dictionary<string, T> typedDict;
if (PropertDicts.TryGetValue(typeof(T), out object dict)) {
typedDict = (Dictionary<string, T>)dict;
} else {
typedDict = new Dictionary<string, T>();
PropertDicts.Add(typeof(T), typedDict);
}
typedDict[name] = value;
}
public static T GetProperty<T>(string name)
{
if (PropertDicts.TryGetValue(typeof(T), out object dict)) {
var typedDict = (Dictionary<string, T>)dict;
if (typedDict.TryGetValue(name, out T value)) {
return value;
}
}
return default(T);
}
但是泛型仅在您知道高级属性的类型时才起作用。对于完全动态的场景,泛型是没有用的。