public static class Utility {
public static void ShadowDeserializeFile<T, S>(this T target, FileInfo file)
where T : ShadowDeserializable<S> {
S shadow = SomeHelpingMethod(file);
target.ShadowDeserialize(shadow);
}
}
public interface ShadowDeserializable<S> {
void ShadowDeserialize(S shadow);
}
有了以上代码,我希望我可以这样称呼它:
var something = new SomeType(); //SomeType implements ShadowDeserializable<ShadowType>
something.ShadowDeserializeFile<ShadowType>(aFileInfoObj);
然而,Visual Studio发出错误,指出使用泛型方法需要2个类型参数。仅当按以下方式调用时,它才会编译:
something.ShadowDeserializeFile<SomeType,ShadowType>(aFileInfoObj);
我尝试在方法声明中切换类型参数的顺序,没有区别。
我应该如何修改声明,以便可以像我期望的那样简洁地调用它?
或者我的期望是错误的,因为在这种情况下,扩展类型参数不能被省略?