我有一个代码的情况Dictionary<string, string>似乎是最好的主意 - 我需要这些对象的集合,我需要它们可以通过一个唯一的密钥访问.究竟是什么字典概念,对吧?
好吧,这些要求已经扩展到我现在需要为每个键保存一点额外信息的点(如果你很好奇,则为布尔值).
所以,我想扩展概念,用字符串和布尔值创建一个新的数据结构,并让它现在成为一个Dictionary<string, NewCustomObject>.
但是,对于像布尔标志这样的一个额外值,它只是感觉有点过分.然而,我不知道任何类似字典的通用对象,每个键有两个值.
只是有一个自定义对象字典是最好的方法,或者这个场景有什么更简单的东西吗?
我有一个结构可以使用三深嵌套字典很容易地表示,就像这样
private static Dictionary<string, Dictionary<string, Dictionary<string,string>>> PrerenderedTemplates;
Run Code Online (Sandbox Code Playgroud)
结构可能会像这样使用
PrerenderedTemplates[instanceID][templategroup][templatepart]
Run Code Online (Sandbox Code Playgroud)
现在,我意识到这段代码很难阅读,因为通过查看定义语句,你无法分辨出它的用途.我可以真正看到改变它的唯一优势Dictionary<string, PrerenderedTemplate>是可读性.将每个嵌套转换为自己的类(例如class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{})将为很少(如果有的话)计算优势添加更多代码行.据我所知.
Dictionary在文档/注释中的工作方式更新
所以,受Reza的启发,但无法使用Tuples,我决定创建自己的密钥生成器并实现他的模式:
private Dictionary<string, string> PrerenderedTemplates;
private string GetPrerenderedTemplateKey(string InstanceId, string FeatureId, string OptionId)
{
return new StringBuilder(instanceId)
.Append(FormatTools.LIST_ENTRY_DELIMITER)
.Append(templategroup)
.Append(FormatTools.LIST_ENTRY_DELIMITER)
.Append(templatepart).ToString();
}
Run Code Online (Sandbox Code Playgroud)
FormatTools.LIST_ENTRY_DELIMITERUnicode专用字符在哪里0xe04d.
我经常需要一个键到多个vaules字典,但在C#中,大多数都是像Dictionary和Hashtable这样的两个维度.
我想要这样的东西:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
Run Code Online (Sandbox Code Playgroud)
dt inside <>表示数据类型.有人有这方面的想法吗?
问题" 多值字典 " 的多个答案建议使用类TValue中的不可变类Dictionary<TKey, TValue>.
接受的Jon Skeet的答案提出了一个Pair具有readonly属性的类和@ teedyay使用不可变的答案Tuple.
这种方法的基本原理(或可能的好处)是什么?
和附带问题:如果相应的属性First和Second无论如何都没有setter,
为什么要使TFirst和TSecond只读:
private readonly TFirst first;
private readonly TSecond second;
public TFirst First
{
get { return first; }
}
public TSecond Second
{
get { return second; }
}
Run Code Online (Sandbox Code Playgroud)
更新:
我正在使用带有自定义类的字典来表示其中的值.
并且va lues正在更新.
让我们变成一成不变的可能原因(好处)是什么?
我看Lookup<TKey, TElement> Class也是不可改变的,以为我错过使用LINQ查询的一些好处(?)
如果是这样,你可以给我什么样的例子我错过?
在C#中我需要将数据保存在字典对象中,如下所示:
Dictionary<string, Dictionary<string, string>> MyDict =
new Dictionary<string, Dictionary<string, string>>();
Run Code Online (Sandbox Code Playgroud)
现在我意识到,在某些情况下,我需要一些其他(不像字典)数据作为主要字典的值.
如果我只是实例主要词典,是否有任何问题或限制.如:
Dictionary<string, object> MyDict = new Dictionary<string, object>();
Run Code Online (Sandbox Code Playgroud)
在对象字段中我可以放字符串,字典,等等..
在此先感谢,最诚挚的问候,史蒂文