您推荐哪个系列?

时间:2018-07-16 19:26:53

标签: c#

我需要像在字典中那样存储值。

例如

public class Dictionary
{
}

词典是主要主题。

并希望使用键将其保留在其中。

First Key | Second Key | Value
----------+------------+------
  En      | Name       | Shop    
  En      | Path       | /en  
  De      | Name       | Geschäft  
  De      | Path       | /de  

代码:

var dictionary = new Dictionary();
var enPath = dictionary.En.Path;

那我应该用什么来实现上述目标,有可能吗?

7 个答案:

答案 0 :(得分:1)

这是一个主意:

hr = VP->ProcessMessage(MFT_MESSAGE_NOTIFY_BEGIN_STREAMING, NULL);
hr = VP->ProcessInput(0, sample, 0);
DWORD statusFlags;
hr = VP->GetOutputStatus(&statusFlags);
while (statusFlags == 0)
{
    hr = VP->ProcessInput(0, sample, 0);
    hr = VP->GetOutputStatus(&statusFlags);
}
DWORD outputStatus = 0;
IMFSample* outputSample;
MFCreateSample(&outputSample);
MFT_OUTPUT_DATA_BUFFER outputBuffer = {};
outputBuffer.pSample = outputSample;
hr = VP->ProcessOutput(0, OutputInfo.cbSize, &outputBuffer, &outputStatus);

Tuple的优点是它可以很好地跟踪组合2个元素的唯一性,而无需通过实现接口来构建。

一个基本示例,我不建议在其中包含多个字段的记录使用

Dictionary<Tuple<String,String>, String> d = new Dictionary<Tuple<String, String>, String>();

答案 1 :(得分:1)

首先,应避免为您的类提供与.NET中存在的类相同的名称。

第二,我认为这根本不要求您创建一个新类。这可以通过使用.NET的Dictionary<>类型来实现:

var dictionary = new Dictionary<string, Dictionary<string, string>>();
dictionary["En"] = new Dictionary<string, string>();
dictionary["En"]["Name"] = "Shop";
dictionary["En"]["Path"] = "/en";

dictionary["De"] = new Dictionary<string, string>();
dictionary["De"]["Name"] = "Geschäft";
dictionary["De"]["Path"] = "/de";

您可以创建具有NamePath属性的类,而不使用内部字典,但是我不会将其称为Dictionary

也许类似Shop

public class Shop
{
    public string Name { get; set; }
    public string Path { get; set; }
}

var dictionary = new Dictionary<string, Shop>();
dictionary["En"] = new Shop { Name = "Shop", Path = "/en" };
dictionary["De"] = new Shop { Name = "Geschäft", Path = "/de" };

答案 2 :(得分:1)

有几种方法可以实现这一目标。首先是简单地拥有字典词典:

var dictionary = new Dictionary<Dictionary<string,string>>();
dictionary["en"] = new Dictionary<string,string>();
dictionary["en"]["name"] = "Shop";

这将起作用,但是您必须记住在访问每个内部字典之前将其实例化(上面我的第二行)。

另一种方法是使用字典,其中的键是元组,即有序的一对值。如果您使用的是C#7.0,则可以使用值元组作为键:

var dictionary = new Dictionary<(string,string), string>();
dictionary[("en", "name")] = "Shop";

答案 3 :(得分:0)

这是一个可能会产生意见的问题。但是,我觉得有必要告诉您,您的问题不错,只是表达错误。

对我来说,这不是一个收藏问题,更多是一个面向对象的问题。

您最好的选择可能是将您在不同班级需要的东西分开。

您的情况似乎假设您需要某种Location类,该类可以包含NamePath(可能是属性)。

public class Location
{
    public Location (string path, string name){
        Path = path;
        Name = name
    }
    public string Path{ get; private set }
    public string Name{ get; private set }
}

Location EN = new Location ("/en","Shop")

然后,您可以根据自己的想法将它们添加到字典或列表中。

使用这种方法,您可以获得与您要求的语法类似的语法(EN.PathEn.Name)。

答案 4 :(得分:0)

var result = Dictionary<Tuple<String, String>, String> 

应该为您工作。

答案 5 :(得分:0)

为此,如果要使用字典,则需要使用嵌套字典。

它看起来像这样:

var dictionary = new Dictionary<string, Dictionary<string, string>>();
dictionary.Add("En", new Dictionary<string, string>());
dictionary["En"].Add("Name", "Shop");

但是,基于有限的信息和显示的数据,您应该只使用DataTable。

var dt = new DataTable();
dt.Columns.Add("FirstKey");
dt.Columns.Add("SecondKey");
dt.Columns.Add("Value");
dt.Rows.Add(new Object() {"En", "Name", "Shop"});

然后,您可以使用Linq查询数据表。

答案 6 :(得分:-1)

public class Dictionary // Use a different name than Dictionary
{
    public string FirstKey { get; set; }
    public string SecondKey { get; set; }
    public string Value { get; set; }
}

public class MainClass
{
    List<Dictionary> MyDictionary = new List<Dictionary>();

}