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