C# 中的 IReadOnlyDictionary 和 IReadOnlyList 是接口,用于表示只读的字典和只读的列表。这些接口提供了对集合的只读访问权限,即不允许对集合进行修改操作,例如添加、删除或修改元素。这种只读特性对于需要保护数据完整性或只需要进行读取操作的场景非常有用。
- IReadOnlyDictionary<TKey, TValue>:- IReadOnlyDictionary<TKey, TValue>接口表示只读的键值对字典。它继承自- IEnumerable<KeyValuePair<TKey, TValue>>接口,因此可以像遍历字典一样遍历只读字典中的键值对。
- IReadOnlyDictionary<TKey, TValue>提供了一组只读的属性和方法,例如- Count属性用于获取字典中键值对的数量,- Keys属性用于获取只读的键的集合,- Values属性用于获取只读的值的集合,- ContainsKey()方法用于检查字典中是否包含指定的键,以及- TryGetValue()方法用于根据键获取对应的值。
- 示例:
 
IReadOnlyDictionary<string, int> dictionary = new Dictionary<string, int>()
{{ "Apple", 1 },{ "Banana", 2 },{ "Orange", 3 }
};Console.WriteLine(dictionary["Apple"]);  // 输出: 1// 遍历只读字典的键值对
foreach (var kvp in dictionary)
{Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
- IReadOnlyList<T>:- IReadOnlyList<T>接口表示只读的元素列表。它继承自- IEnumerable<T>接口,因此可以使用迭代器遍历只读列表。
- IReadOnlyList<T>提供了一组只读的属性和方法,例如- Count属性用于获取列表中的元素数量,- Item[]属性用于通过索引访问列表中的元素,- Contains()方法用于检查列表中是否包含指定的元素,- IndexOf()方法用于获取指定元素在列表中的索引位置。
- 示例:
 
IReadOnlyList<string> list = new List<string>() { "Apple", "Banana", "Orange" };Console.WriteLine(list[0]);  // 输出: Apple// 遍历只读列表
foreach (var item in list)
{Console.WriteLine(item);
}
需要注意的是,IReadOnlyDictionary 和 IReadOnlyList 接口只提供了对集合的只读访问权限,不允许对集合进行修改操作。如果需要对集合进行修改操作,可以使用 Dictionary<TKey, TValue> 和 List<T> 类。