索引初始化程式
索引初始化程式可以同時建立和初始化帶索引的物件。
這使得初始化詞典非常容易:
var dict = new Dictionary<string, int>()
{
["foo"] = 34,
["bar"] = 42
};
具有索引的 getter 或 setter 的任何物件都可以使用以下語法:
class Program
{
public class MyClassWithIndexer
{
public int this[string index]
{
set
{
Console.WriteLine($"Index: {index}, value: {value}");
}
}
}
public static void Main()
{
var x = new MyClassWithIndexer()
{
["foo"] = 34,
["bar"] = 42
};
Console.ReadKey();
}
}
輸出:
索引:foo,值:34
索引:bar,值:42
如果該類有多個索引器,則可以將它們全部分配到一組語句中:
class Program
{
public class MyClassWithIndexer
{
public int this[string index]
{
set
{
Console.WriteLine($"Index: {index}, value: {value}");
}
}
public string this[int index]
{
set
{
Console.WriteLine($"Index: {index}, value: {value}");
}
}
}
public static void Main()
{
var x = new MyClassWithIndexer()
{
["foo"] = 34,
["bar"] = 42,
[10] = "Ten",
[42] = "Meaning of life"
};
}
}
輸出:
指數:foo,價值:34
指數:柱,價值:42
指數:10,價值:十
指數:42,價值:生命的意義
應該注意的是,與 Add
方法(在集合初始化器中使用)相比,索引器 set
訪問器可能表現不同。
例如:
var d = new Dictionary<string, int>
{
["foo"] = 34,
["foo"] = 42,
}; // does not throw, second value overwrites the first one
與:
var d = new Dictionary<string, int>
{
{ "foo", 34 },
{ "foo", 42 },
}; // run-time ArgumentException: An item with the same key has already been added.