简体   繁体   English

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

[英]Casting with generics in C#

Given the following snippet, how can I cast IMessage to type of TMessage ? 给定以下代码段,如何将IMessage转换为TMessage类型?

public void Publish<TMessage>(IMessage message) 
{
     var t = typeof(TMessage);
     MyFunction((t)message); // how can a cast message to type of TMessage?
}

Like any other cast: 像其他演员一样:

public void Publish<TMessage>(IMessage message) {
    var t = (TMessage)message;
    MyFunction(t);
}

Edit: If compiler says 'invalid cast', then is probably right. 编辑:如果编译器说“无效的转换”,那么可能是正确的。 However, for cases when compiler is not right, you can "trick" him. 但是,对于编译器不正确的情况,您可以“欺骗”他。

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);
}

It will set t as null instead of giving runtime error. 它将t设置为null而不是给出运行时错误。

You no need to cast some parameters, just use generic methods. 您无需强制转换某些参数,只需使用通用方法即可。

// 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