简体   繁体   中英

Casting with generics in C#

Given the following snippet, how can I cast IMessage to type of 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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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