用值初始化c#字典的正确方法
本文关键字:方法 字典 初始化 | 更新日期: 2023-09-27 18:17:50
我正在用以下代码在c#文件中创建一个字典:
private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
= new Dictionary<string, XlFileFormat>
{
{"csv", XlFileFormat.xlCSV},
{"html", XlFileFormat.xlHtml}
};
在new
下面有一条红线,错误:
特性'集合初始化器'不能使用,因为它不是ISO-2 c#语言规范的一部分
这是怎么回事?
我使用的是。net版本2
我无法在一个简单的。net 4.0控制台应用程序中重现这个问题:
static class Program
{
static void Main(string[] args)
{
var myDict = new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" }
};
Console.ReadKey();
}
}
你能试着在一个简单的控制台应用程序中复制它吗?似乎你的目标是。net 2.0(不支持它)或客户端配置文件框架,而不是一个支持初始化语法的。net版本。
在c# 6.0中,您可以通过以下方式创建字典:
var dict = new Dictionary<string, int>
{
["one"] = 1,
["two"] = 2,
["three"] = 3
};
可以内联初始化Dictionary
(和其他集合)。每个成员都包含在大括号中:
Dictionary<int, StudentName> students = new Dictionary<int, StudentName>
{
{ 111, new StudentName { FirstName = "Sachin", LastName = "Karnik", ID = 211 } },
{ 112, new StudentName { FirstName = "Dina", LastName = "Salimzianova", ID = 317 } },
{ 113, new StudentName { FirstName = "Andy", LastName = "Ruth", ID = 198 } }
};
参见如何使用集合初始化器初始化字典(c#编程指南)了解详细信息。
假设我们有一个这样的字典:
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");
可以按如下方式初始化。
Dictionary<int, string> dict = new Dictionary<int, string>
{
{ 1, "Mohan" },
{ 2, "Kishor" },
{ 3, "Pankaj" },
{ 4, "Jeetu" }
};
对象初始化器是在c# 3.0中引入的。检查你的目标框架版本
c# 3.0概述请注意,c# 9允许目标类型的new表达式,因此,如果您的变量或类成员不是抽象类或接口类型,则可以避免重复:
private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT = new ()
{
{ "csv", XlFileFormat.xlCSV },
{ "html", XlFileFormat.xlHtml }
};
With С# 6.0
var myDict = new Dictionary<string, string>
{
["Key1"] = "Value1",
["Key2"] = "Value2"
};
下面是一个Dictionary值为
的Dictionary示例 Dictionary<string, Dictionary<int, string>> result = new() {
["success"] = new() {{1, "ok"} , { 2, "ok" } },
["fail"] = new() {{ 3, "some error" }, { 4, "some error 2" } },
};
在JSON中相当于:
{
"success": {
"1": "ok",
"2": "ok"
},
"fail": {
"3": "some error",
"4": "some error 4"
}
}