C# ReadOnlyDictionary<;TKey,TValue>;使用只读集合<;T>;
我有一大堆类需要返回属性作为C# ReadOnlyDictionary<;TKey,TValue>;使用只读集合<;T>;,c#,.net,.net-5,c#-8.0,C#,.net,.net 5,C# 8.0,我有一大堆类需要返回属性作为ReadOnlyCollections,当它们只是Lists时效果很好,但是,当List在字典中时,事情变得非常混乱 ================================================ 例如,这是我作为只读集合返回的典型列表: private readonly List<string> _encryptionKeys; public ReadOnlyCollection<string> Encryp
ReadOnlyCollection
s,当它们只是List
s时效果很好,但是,当List在字典中时,事情变得非常混乱
================================================
例如,这是我作为只读集合返回的典型列表:
private readonly List<string> _encryptionKeys;
public ReadOnlyCollection<string> EncryptionKeys => _encryptionKeys.AsReadOnly();
私有只读列表\u加密密钥;
public ReadOnlyCollection EncryptionKeys=>_EncryptionKeys.AsReadOnly();
================================================
然而,这是我需要为一本只读小说做的抽搐:
private readonly ReadOnlyDictionary属性;
public ReadOnlyDictionary属性=>\u属性;
。。。使用临时变量:
Dictionary<string, List<string>> attributes = new Dictionary<string, List<string>>();
Dictionary attributes=newdictionary();
。。。向其中添加值及其列表,然后构建我的属性:
Dictionary<string, ReadOnlyCollection<string>> readonlyListDictionary = new Dictionary<string, ReadOnlyCollection<string>>();
foreach (string key in attributes.Keys)
readonlyListDictionary.Add(key, attributes[key].AsReadOnly());
_attributes = new ReadOnlyDictionary<string, ReadOnlyCollection<string>>(readonlyListDictionary);
Dictionary readonlyistdictionary=newdictionary();
foreach(attributes.Keys中的字符串键)
添加(键,属性[key].AsReadOnly());
_属性=新的ReadOnlyDictionary(readonlyListDictionary);
================================================
有人有什么建议吗?将其作为一种扩展方法,这样您就不必一直考虑它:
public static ReadOnlyDictionary AsReadOnly(此字典源代码)
{
返回新的ReadOnlyDictionary(
新词典(
source.Select(kvp=>
新的KeyValuePair(kvp.Key、kvp.Value.AsReadOnly())
));
}
尽管如此,采用IEnumerable
的构造函数仅在.NET 5中可用。因此,在早期版本中,我们必须使用foreach
。当我们预先调整字典的大小时,此选项的性能可能会更高
public static ReadOnlyDictionary AsReadOnly(此字典源代码)
{
var dict=新字典(source.Count);
foreach(源中的var kvp)
dict[kvp.Key]=kvp.Value.AsReadOnly();
返回新的只读字典(dict);
}
只需像使用另一个AsReadOnly
扩展一样使用它。Linq可以为您完成重磅提升
字典输入=新建字典();
ReadOnlyDictionary输出=新的ReadOnlyDictionary(dict.ToDictionary(kv=>kv.Key,kv=>kv.Value.AsReadOnly());
<代码> >我建议避免<代码> RealOnLyDeCys<代码>。由于各种原因,我不会进入。考虑返回<代码> iRealOnt.< /Cord>接口。也请看<代码> Stury.St藏品。不可变的< /代码>(因为不可变性比单纯的代码> iRead……/代码>对消费者提供更大的保证)。。您需要随机访问列表中的值吗?您可以直接从字典中创建一个查找,它实际上是一个只读的枚举字典。太好了!谢谢
Dictionary<string, ReadOnlyCollection<string>> readonlyListDictionary = new Dictionary<string, ReadOnlyCollection<string>>();
foreach (string key in attributes.Keys)
readonlyListDictionary.Add(key, attributes[key].AsReadOnly());
_attributes = new ReadOnlyDictionary<string, ReadOnlyCollection<string>>(readonlyListDictionary);