我需要像在字典中那样存储值。
例如
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;
那我应该用什么来实现上述目标,有可能吗?
答案 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";
您可以创建具有Name
和Path
属性的类,而不使用内部字典,但是我不会将其称为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
类,该类可以包含Name
和Path
(可能是属性)。
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.Path
或En.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>();
}