理想情况下,这就是我想要做的事情。
private List<Type,Dictionary<string,string>> dynamicFields;
这样的例子就是。
Class1 "1","value"
"2","value1"
为什么我想要这个,我是否会为每个添加一个Type和一些字典字段,然后使用linq来检索属于每个类的那些以进行其他操作。
由于这是不可能的,因为编译器会给我错误。
“使用通用类型列表需要一个参数”
创建我想要的对象的方法可能是什么。
答案 0 :(得分:2)
最简单的答案是使用字典词典:
private Dictionary<Type, Dictionary<string, string>> dynamicFields;
请注意,您需要确保在添加条目之前使用Dictionary<string, string>
初始化每个外部条目,并且要获得内部条目,您需要对TryGetValue
进行两次调用。正如您所描述的那样,您正在嵌套容器,并将内部字典传递给另一个方法,因此这可能确实是最佳选择。
希望每个Dictionary<string, string>
只有一个Type
。如果没有,你不能合并它们,你现在需要一个列表,事情又变得更加丑陋了:
private Dictionary<Type, List<Dictionary<string, string>>> dynamicFields;
然而,这仍然可以说是在给定某个Type
的情况下检索内部词典列表的最有效方法。
现在,您正在寻找替代方案。我不确定这是否适用于您的特定情况,但听起来您正在尝试创建一组属性包,我可能想要称之为静态扩展属性。我会质疑你是否真的希望属性包是静态的,或者它们是否属于Class1
等人的实例。在这种情况下,我建议您的类继承自包含可扩展属性包的基类。 ExpandoObject
基本上已经这样做了,但如果你明确想要字符串字典,你可以自己实现一些东西。例如:
abstract class DynamicFieldEntity
{
protected Dictionary<string, string> DynamicFields { get; } =
new Dictionary<string, string>();
}
class Class1 : DynamicFieldEntity {}
答案 1 :(得分:1)
因为List只接受一个参数作为泛型参数。 你必须像这样声明一个A类:
public class A
{
public Type Type { get; set; }
public Dictionary<string, string> KeyValue { get; set; }
}
然后将列表声明为private List<A> dynamicFields