如何在参数不同但可转换时转换泛型类型?

Ger*_*ton 1 c# generics

我有一个方法参数,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);
...
Run Code Online (Sandbox Code Playgroud)

Jam*_*iec 5

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

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