簡體   English   中英

C#在運行時從泛型類型查找方法重載

[英]c# find method overload from generic type at runtime

請考慮以下方法:

public void foo(int a) {
   //do something with a
}

public void foo(ushort a) {
   //do something with a
}

public void foo<T>(Nullable<T> a) where T : struct {
     if (!a.HasValue) {
        return;
     }

     foo(a.Value); //find appropriate method based on type of a?
}

有什么方法可以根據參數的通用類型找到相應的調用方法? 例如,如果(T)a是一個整數,則調用第一個方法,如果它是一個ushort,則調用第二個方法。 如果沒有此類方法超出范圍,則可能拋出運行時異常。

我嘗試了以下方法:

public void foo<T>(Nullable<T> a) where T : struct {
     if (!a.HasValue) {
        return;
     }
     switch(a.Value.GetType()) {
           case typeof(int): foo((int)a.Value); break;
           case typeof(ushort): foo((ushort)a.Value); break;
           //and so on
     }
}

但是編譯器不喜歡強制轉換(“無法將類型T轉換為int”); 有什么方法可以實現我的目標?

嘗試

public void foo<T>(Nullable<T> a) where T : struct {
 if (!a.HasValue) {
    return;
 }

 foo((dynamic)a.Value);
}

a.Value的類型將在運行時通過使用dynamic解析,並將調用適當的重載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM