相关疑难解决方法(0)

C#字典每个键有两个值?

我有一个代码的情况Dictionary<string, string>似乎是最好的主意 - 我需要这些对象的集合,我需要它们可以通过一个唯一的密钥访问.究竟是什么字典概念,对吧?

好吧,这些要求已经扩展到我现在需要为每个键保存一点额外信息的点(如果你很好奇,则为布尔值).

所以,我想扩展概念,用字符串和布尔值创建一个新的数据结构,并让它现在成为一个Dictionary<string, NewCustomObject>.

但是,对于像布尔标志这样的一个额外值,它只是感觉有点过分.然而,我不知道任何类似字典的通用对象,每个键有两个值.

只是有一个自定义对象字典是最好的方法,或者这个场景有什么更简单的东西吗?

c# generics dictionary

39
推荐指数
4
解决办法
8万
查看次数

深层嵌套词典是反模式吗?

我有一个结构可以使用三深嵌套字典很容易地表示,就像这样

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.

c# oop dictionary data-structures

17
推荐指数
1
解决办法
2077
查看次数

C#中多个值字典的一个关键点?

我经常需要一个键到多个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 <>表示数据类型.有人有这方面的想法吗?

c#

8
推荐指数
2
解决办法
5万
查看次数

为什么要在字典中使用不可变值?

问题" 多值字典 " 的多个答案建议使用类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查询的一些好处(?)
如果是这样,你可以给我什么样的例子我错过?

.net c# linq collections dictionary

5
推荐指数
1
解决办法
408
查看次数

使用Dictionary <string,object>作为Dictionary <string,Dictionary <string,string >>

在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)

在对象字段中我可以放字符串,字典,等等..

在此先感谢,最诚挚的问候,史蒂文

c# dictionary object

3
推荐指数
2
解决办法
3万
查看次数

标签 统计

c# ×5

dictionary ×4

.net ×1

collections ×1

data-structures ×1

generics ×1

linq ×1

object ×1

oop ×1