作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下通用方法将一种类型的输入对象序列化为父类(super class)型,如下所示:
public string SerialiseAs<TResult, TInput>(TInput input) where TInput : TResult
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(TResult));
MemoryStream stream = new MemoryStream();
ser.WriteObject(stream, input);
stream.Position = 0;
StreamReader reader = new StreamReader(stream);
return reader.ReadToEnd();
}
我必须调用此方法来指定两个通用类型,如下所示:
MySubType x = new MySubType();
string json = SerialiseAs<MySuperType, MySubType>(x);
我的问题是,为什么不能在这种情况下推断出TInput
?是因为 TResult
实际上没有被用作返回类型吗?以下代码更清晰,但由于缺少输入类型而无法编译:
MySubType x = new MySubType();
string json = SerialiseAs<MySuperType>(x);
最佳答案
My question is, why can't TInput be inferred in this situation?
它可以 - 它是无法推断的 TResult
,并且无法指定“部分”推断。
有时您可以做的是将类型参数分成用于通用类型的参数和用于通用方法的参数,这样您d 结束于:
// Explicitly state TResult, and infer TInput
Serializer<MySuperType>.Serialize(x);
关于具有多种类型的 C# 泛型类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719557/
我是一名优秀的程序员,十分优秀!