Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不可变字典TryAdd_C# - Fatal编程技术网

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();
}