gpt4 book ai didi

c# - 字典初始值设定项中的 KeyValuePair 类型推断

转载 作者:行者123 更新时间:2023-12-04 16:54:35 25 4
gpt4 key购买 nike

我正在 build 一个 Dictionary带 key 型KeyValuePair .使用时KeyValuePair.CreateDictionary初始化程序它不需要模板类型并且它正确地推断了类型,以下编译正确,甚至没有警告:

private static readonly IDictionary<KeyValuePair<Market, MarketData>, string> channelDict =
new Dictionary<KeyValuePair<Market, MarketData>, string> {
{ KeyValuePair.Create(Market.USD, MarketData.Trade), "trades" },
...
};

现在重新组织代码,输入 MarketMarketData已移至单独的项目和命名空间,命名空间由 using 导入文件顶部的语句,但现在无法编译相同的代码,它会引发此错误:
error CS0305: Using the generic type 'KeyValuePair<TKey, TValue>' requires 2 type arguments

我可以肯定 using命名空间导入正确,因为简单添加 private Market _m;没有产生任何错误,更重要的是,字典的定义:
private static readonly IDictionary<KeyValuePair<Market, MarketData>, string> channelDict =
new Dictionary<KeyValuePair<Market, MarketData>, string>

也没有产生错误,是 Create方法无法编译:
KeyValuePair.Create(Market.USD, MarketData.Trade)

那么为什么当类型参数在另一个命名空间中时它现在不能推断类型,而以前可以呢?

最佳答案

经过一番挖掘,我才发现问题不在于KeyValuePair的初始化问题。 ,而是因为目标框架的不同。

最初所有代码都在同一个 .NET Core 控制台应用程序中,将目标框架设置为 netcoreapp2.0 ,以及来自 .NET Core 2.0 中的文档, KeyValuePair 是一个带有静态方法的静态类 Create ,这将正确推断类型参数。

然后当我重新组织代码时,我把这部分移到了一个类库中,默认情况下,dotnet工具会设置netstandard2.0然而,作为其目标框架, KeyValuePair Createnetstandard2.0 中不可用,正如您从 docs 中看到的, 它说:

This API is not supported in the currently selected framework.



这就是为什么代码在移动到库项目时无法编译的原因,只有通用 KeyValuePair<K, V> 版本在 netstandard框架。

作为一种解决方法,我在将 .csproj 文件中的目标框架设置为 netcoreapp2.0 时进行了验证。和 outputtypelibrary ,编译成功。

OTOH,库项目默认使用 netstandard,因为它确保库在不同平台目标之间可用,因此更好的解决方法是不使用 static KeyValuePair.Create在库代码中,并使用通用版本代替: new KeyValuePair<K, V>(k, v) .

关于c# - 字典初始值设定项中的 KeyValuePair 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44961080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com