【发布时间】:2019-02-26 21:49:33
【问题描述】:
我在代码中不断遇到的问题是这样的,
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# 中有效地做到这一点?我的另一个想法是创建一个<string, object> 类型的Dictionary 并使用它(我知道没有generic Dictionary 类型我也可以使用)然后它只是一个返回一个可以是Pattern Matched 的对象以查找其原始类型。
这个选项的问题是变量的boxing 和un-boxing 以及它失去了它的通用性。我的另一个选择是为Property 创建一个抽象基类,但是因为每个属性都包含一个名称-值对,因此需要再次使用generics,我们遇到了尝试动态返回不同Types 的相同问题.
任何帮助将不胜感激!谢谢。
【问题讨论】:
-
是否装箱和拆箱对您来说真的是个问题?因为您可以使用
Dictionary<string, object>并让GetProperty<T>返回(T)dict[name]。据我所知,Umbraco 如何处理从其页面属性字典返回的属性。 -
简单实现
object GetProperty(string name) -
dict<string, object>看起来是最强大的解决方案。我建议您不要太在意装箱/拆箱,除非它是热门路径。 -
感谢 cmets 伙计们,只是想检查一下我没有错过一个非常简单的方法!将使用对象字典选项,谢谢!
标签: c# generics pattern-matching