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.