[英]Casting with generics in C#
给定以下代码段,如何将IMessage
转换为TMessage
类型?
public void Publish<TMessage>(IMessage message)
{
var t = typeof(TMessage);
MyFunction((t)message); // how can a cast message to type of TMessage?
}
像其他演员一样:
public void Publish<TMessage>(IMessage message) {
var t = (TMessage)message;
MyFunction(t);
}
编辑:如果编译器说“无效的转换”,那么可能是正确的。 但是,对于编译器不正确的情况,您可以“欺骗”他。
public void Publish<TMessage>(IMessage message) {
var t = (TMessage)(object)message;
MyFunction(t);
}
public void Publish<TMessage>(IMessage message) {
var t = message as TMessage;
MyFunction(t);
}
它将t设置为null而不是给出运行时错误。
您无需强制转换某些参数,只需使用通用方法即可。
// Your code
public void Publish<TMessage>(IMessage message)
{
var t = typeof(TMessage);
MyFunction((t)message); // how can a cast message to type of TMessage?
}
// Modified version
public void Publish<TMessage>(TMessage message) where TMessage : IMessage
{
MyFunction(message);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.