簡體   English   中英

通過使用泛型變量作為參數來調用重載函數

[英]Calling an overloaded function by using a generic variable as a parameter

我想擴展BinaryWriter類,以便能夠將列表寫入流。 我想用多種類型的列表來做這件事。 我將此通用函數設置為擴展

public static void Write<T>(this BinaryWriter source, IEnumerable<T>items)
{
     foreach (T item in items)
          source.Write(item)//This doesn't work
} 

這是可能嗎? 我知道write可以處理所有內置類型。 我知道有能力將T約束到某些類型,但我無法為int和double執行此操作。

我只需要它為int,double和bytes工作。

我知道有能力將T約束到某些類型

不幸的是,編譯器不知道T是這些類型之一,所以它必須抱怨。

我只需要它為int,double和bytes工作。

那你可以做三次重載:

public static void Write(this BinaryWriter source, IEnumerable<int>items) {
    foreach (var item in items)
        source.Write(item);
}
public static void Write(this BinaryWriter source, IEnumerable<double>items) {
    foreach (var item in items)
        source.Write(item);
}
public static void Write(this BinaryWriter source, IEnumerable<byte>items) {
    foreach (var item in items)
        source.Write(item);
}

dasblinkenlight的解決方案可能是要走的路,但這里有一個替代方案:

public static void Write(this BinaryWriter source, IEnumerable items)
{
     foreach (dynamic item in items)
          source.Write(item); //runtime overload resolution! It works!
}

有關dynamic更多信息,請參閱文檔

暫無
暫無

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

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