当参数不同但可转换时,如何强制转换泛型类型

本文关键字:何强制 转换 泛型类型 可转换 参数 | 更新日期: 2023-09-27 18:35:56

我有一个方法参数需要IDictionary<string,string>但我想传递它一个IDictionary<string,JToken>(Newtonsoft.Json)。

强制转换在运行时失败,但由于JToken同时提供了隐式和显式转换方法,我认为可能有一种方法可以转换。

如何实现这种演员阵容?

class MyClass
{
    void Method(IDictionary<string,string> data) {}
}
...
IDictionary<string,JToken> record = ...;
MyClass cls = new MyClass();
cls.Method((IDictionary<string,string>)record);
...

当参数不同但可转换时,如何强制转换泛型类型

你不能从一个Cast到另一个,几乎唯一的方法是创建一个新的字典:

IDictionary<string,JToken> record = ...;
MyClass cls = new MyClass();
cls.Method(record.ToDictionary(k => k.Key,v => (string)v.Value));