繁体   English   中英

使用C#中的泛型进行转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM