C# 不可变字典TryAdd
C# 不可变字典TryAdd,c#,C#,ImmutableDictionary有一个TryAdd方法,它从System.Collections.Generic.CollectionExtensions(由于某种原因,我在DotNetPeek中找不到该方法) 因此,本文汇编: ImmutableDictionary<int, int> d = ImmutableDictionary<int, int>.Empty; bool b = d.TryAdd(1, 1); ImmutableDictionary d=I
ImmutableDictionary
有一个TryAdd
方法,它从System.Collections.Generic.CollectionExtensions
(由于某种原因,我在DotNetPeek中找不到该方法)
因此,本文汇编:
ImmutableDictionary<int, int> d = ImmutableDictionary<int, int>.Empty;
bool b = d.TryAdd(1, 1);
ImmutableDictionary d=ImmutableDictionary.Empty;
bool b=d.TryAdd(1,1);
但是我不明白它是干什么的?它不应该返回一个新的ImmutableDictionary吗?
TryAdd
很可能绑定到IDictionary
,而ImmutableDictionary
实现了它。很可能它对ImmutableDictionary
一无所知,并遵循Try…
模式,生成bool
值。确实返回了一个新的带有该值的ImmutableDictionary。您所指的扩展方法看起来很有用
我不建议将此扩展方法与不可变字典一起使用,因为虽然这将编译,但在运行时会得到一个NotSupportedException
再进一步看一下,IDictionary.Add
的显式接口实现将简单地抛出NotSupportedException
,这似乎是合适的
void IDictionary.Add(TKey键,TValue值)
{
抛出新的NotSupportedException();
}
比我的答案好得多。@kofifus这不是一个真正的bug。这只是接口的限制。如果您强制转换不可变字典,正如前面提到的,它将抛出。对我来说,拥有一个什么都不做的方法是错误的行为,运行时检查还不够好,不可变字典不应该继承CollectionExtensions@kofifus没有。它实际上应该只实现IReadOnlyDictionary
。
void IDictionary<TKey, TValue>.Add(TKey key, TValue value)
{
throw new NotSupportedException();
}