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