Ik maak een woordenboek in een C#-bestand met de volgende code:
private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
= new Dictionary<string, XlFileFormat>
{
{"csv", XlFileFormat.xlCSV},
{"html", XlFileFormat.xlHtml}
};
Er staat een rode lijn onder new
met de fout:
Functie ‘collection initializer’ kan niet worden gebruikt omdat het geen deel uitmaakt van de ISO-2 C#-taalspecificatie
Kan iemand uitleggen wat hier aan de hand is?
Ik gebruik .NET versie 2.
Antwoord 1, autoriteit 100%
Ik kan dit probleem niet reproduceren in een eenvoudige .NET 4.0-consoletoepassing:
static class Program
{
static void Main(string[] args)
{
var myDict = new Dictionary<string, string>
{
{ "key1", "value1" },
{ "key2", "value2" }
};
Console.ReadKey();
}
}
Kun je proberen het in een eenvoudige consoletoepassing te reproduceren en van daaruit verder te gaan? Het lijkt erop dat u zich richt op .NET 2.0 (dat dit niet ondersteunt) of een clientprofielframework, in plaats van een versie van .NET die de initialisatiesyntaxis ondersteunt.
Antwoord 2, autoriteit 26%
Met C# 6.0 kunt u op de volgende manier een woordenboek maken:
var dict = new Dictionary<string, int>
{
["one"] = 1,
["two"] = 2,
["three"] = 3
};
Het werkt zelfs met aangepaste typen.
Antwoord 3, autoriteit 4%
Je kunt een Dictionary
(en andere collecties) inline initialiseren. Elk lid is ingesloten met beugels:
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 } }
};
Zie Microsoft Docsvoor details.
Antwoord 4, autoriteit 3%
Stel dat we een dergelijk woordenboek hebben
Dictionary<int,string> dict = new Dictionary<int, string>();
dict.Add(1, "Mohan");
dict.Add(2, "Kishor");
dict.Add(3, "Pankaj");
dict.Add(4, "Jeetu");
We kunnen het als volgt initialiseren.
Dictionary<int, string> dict = new Dictionary<int, string>
{
{ 1, "Mohan" },
{ 2, "Kishor" },
{ 3, "Pankaj" },
{ 4, "Jeetu" }
};
Antwoord 5
Object-initialisatoren zijn geïntroduceerd in C# 3.0, controleer op welke frameworkversie u zich richt.
Antwoord 6
Met С# 6.0
var myDict = new Dictionary<string, string>
{
["Key1"] = "Value1",
["Key2"] = "Value2"
};
Antwoord 7
Code ziet er goed uit. Probeer gewoon de. Netto framework naar v2.0 +