用C#中的泛型进行铸造
本文关键字:泛型 | 更新日期: 2023-09-27 18:09:18
给定以下片段,如何将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);
}