วิธีที่เหมาะสมในการเริ่มต้นพจนานุกรม C # ด้วยค่า?


513

ฉันกำลังสร้างพจนานุกรมในไฟล์ C # ด้วยรหัสต่อไปนี้:

private readonly Dictionary<string, XlFileFormat> FILE_TYPE_DICT
        = new Dictionary<string, XlFileFormat>
        {
            {"csv", XlFileFormat.xlCSV},
            {"html", XlFileFormat.xlHtml}
        };

มีเส้นสีแดงภายใต้newข้อผิดพลาด:

ไม่สามารถใช้คุณลักษณะ 'เครื่องมือรวบรวมข้อมูลเบื้องต้น' เนื่องจากไม่ได้เป็นส่วนหนึ่งของข้อกำหนดภาษา ISO-2 C #

ใครสามารถอธิบายสิ่งที่เกิดขึ้นที่นี่

แก้ไข: เอาล่ะมันกลายเป็นว่าฉันใช้. NET version 2


3
เปลี่ยนเวอร์ชันเฟรมเวิร์กเป้าหมายหรือใช้วิธีการ "เริ่มต้น" แบบเดิม
เซบาสเตียนÐymel

คุณวางโค้ดนี้ในบริบทใด .csไฟล์ที่ได้รับการรวบรวมโดย Visual Studio หรือใน.cshtml? ไฟล์โครงการlanguageVersionของคุณมีองค์ประกอบหรือไม่
CodeCaster

คำตอบ:


826

ฉันไม่สามารถทำซ้ำปัญหานี้ในแอปพลิเคชันคอนโซล 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 ที่สนับสนุนไวยากรณ์การเริ่มต้น


11
ปัญหาคือรุ่นของ C # ที่ OP กำลังใช้งาน initial วัตถุ / คอลเลกชันที่ไม่ได้นำมาใช้จนกว่า C # 3.0 รายละเอียดเกี่ยวกับสาเหตุที่ใช้งานไม่ได้ก่อนหน้านี้ได้รับคำตอบแล้ว
James

@James - แก้ไขเพื่อระบุเช่นนี้
ฮาเน่ย์

ฉันจะตรวจสอบเวอร์ชัน C # ที่ฉันใช้หรือเปลี่ยนแปลงได้อย่างไร
azrosen92

3
คุณสมบัติของโครงการจะระบุเวอร์ชันเป้าหมายของเฟรมเวิร์ก
ฮาเน่ย์

2
@James - ไม่น่าเชื่อถือเนื่องจากบุคคลนี้อาจรับงานมรดกในโซลูชันที่กำหนดเป้าหมาย 2.0 และไม่ทราบเช่น
ฮาเน่ย์

198

ด้วย C # 6.0 คุณสามารถสร้างพจนานุกรมด้วยวิธีต่อไปนี้:

var dict = new Dictionary<string, int>
{
    ["one"] = 1,
    ["two"] = 2,
    ["three"] = 3
};

มันยังทำงานได้กับประเภทที่กำหนดเอง


8
สำหรับผู้ที่สนใจในไวยากรณ์ใหม่นี้ที่นี่เป็นบล็อกโพสต์ที่ดี: marcin-chwedczuk.github.io/ …
csharpfolk

1
นี่คือที่สมบูรณ์แบบสำหรับการประกาศแบบอินไลน์
Tiramonium

1
ดีมาก - ไม่รู้วิธีการเริ่มต้นนี้ ดูเหมือนว่า Python)) ขอบคุณ!
Mikhail T.

ฉันชอบวิธีของคุณที่ betther แต่โปรดจำไว้ว่ามันใช้อักขระ "สำเร็จรูป" จำนวนต่อบรรทัด (4) เป็นคำตอบที่ยอมรับด้วย {"key2", "value2"},
Maxter

35

คุณสามารถเริ่มต้น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 } }
};

ดูMSDNสำหรับรายละเอียด


21

สมมติว่าเรามีพจนานุกรมเช่นนี้

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" }
};

คำตอบ ReSharper
Antony Booth


0

ด้วย c # 6.0

static class Program
{
    static void Main(string[] args)
    {
        var myDict = new Dictionary<string, string>
        {
           ["Key1"]="Value1",
           ["Key2"]="Value2"
        };

        Console.ReadKey();
    }
}

2
นี่เป็นคำตอบแล้ว ไม่เพิ่มอะไรใหม่
nawfal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.