如何正确使用 IReadOnlyDictionary?
How to properly use IReadOnlyDictionary?
来自msdn:
Represents a generic read-only collection of key/value pairs.
但是请考虑以下内容:
class Test
{
public IReadOnlyDictionary<string, string> Dictionary { get; } = new Dictionary<string, string>
{
{ "1", "111" },
{ "2", "222" },
{ "3", "333" },
};
public IReadOnlyList<string> List { get; } =
(new List<string> { "1", "2", "3" }).AsReadOnly();
}
class Program
{
static void Main(string[] args)
{
var test = new Test();
var dictionary = (Dictionary<string, string>)test.Dictionary; // possible
dictionary.Add("4", "444"); // possible
dictionary.Remove("3"); // possible
var list = (List<string>)test.List; // impossible
list.Add("4"); // impossible
list.RemoveAt(0); // impossible
}
}
我可以轻松地将 IReadOnlyDictionary
转换为 Dictionary
(任何人都可以)并更改它,而 List
有不错的 AsReadOnly
方法。
问题:如何正确使用IReadOnlyDictionary
使public确实只读字典?
.NET 4.5 引入了您可以使用的 ReadOnlyDictionary
类型。它有一个接受现有字典的构造函数。
针对较低的框架版本时,请使用 Is there a read-only generic dictionary available in .NET? and Does C# have a way of giving me an immutable Dictionary? 中所述的包装器。
请注意,当使用后者 class 时,集合初始化器语法将不起作用;被编译为 Add()
调用。
来自msdn:
Represents a generic read-only collection of key/value pairs.
但是请考虑以下内容:
class Test
{
public IReadOnlyDictionary<string, string> Dictionary { get; } = new Dictionary<string, string>
{
{ "1", "111" },
{ "2", "222" },
{ "3", "333" },
};
public IReadOnlyList<string> List { get; } =
(new List<string> { "1", "2", "3" }).AsReadOnly();
}
class Program
{
static void Main(string[] args)
{
var test = new Test();
var dictionary = (Dictionary<string, string>)test.Dictionary; // possible
dictionary.Add("4", "444"); // possible
dictionary.Remove("3"); // possible
var list = (List<string>)test.List; // impossible
list.Add("4"); // impossible
list.RemoveAt(0); // impossible
}
}
我可以轻松地将 IReadOnlyDictionary
转换为 Dictionary
(任何人都可以)并更改它,而 List
有不错的 AsReadOnly
方法。
问题:如何正确使用IReadOnlyDictionary
使public确实只读字典?
.NET 4.5 引入了您可以使用的 ReadOnlyDictionary
类型。它有一个接受现有字典的构造函数。
针对较低的框架版本时,请使用 Is there a read-only generic dictionary available in .NET? and Does C# have a way of giving me an immutable Dictionary? 中所述的包装器。
请注意,当使用后者 class 时,集合初始化器语法将不起作用;被编译为 Add()
调用。