簡體   English   中英

在c#擴展函數中使用泛型

[英]using generics in c# extension functions

我正在使用泛型將Java代碼轉換為C#並且遇到了類似容器的問題:

public static class MyExtensions
{
    public static void add(this List<object> list, object obj)
    {
        list.Add(obj);
    }
    public static void add(this List<string> list, string s)
    {
        list.Add(s);
    }
}

似乎泛型在比較參數時丟失了,兩種方法相互沖突。 我想知道仿制葯是否可以這種方式使用。 是否可以使用單個支持所有列表操作:

    public static void add(this List<object> list, object obj)
    {
        list.Add(obj);
    }

例如?

總結所有響應都有相同的解決方案。 列表可以抽象為ICollection。 總的來說,對於生產代碼來說,這可能不是一個好主意。

怎么樣:

public static void add<T>(this IList<T> list, T value)
{
    list.Add(value);
}

(實際上,它可能是ICollection<T> ,因為這(不是IList<T> )定義了Add(T)

你有沒有嘗試過:

public static void add<T>(this List<T> list, T obj)
{
    list.Add(obj);
}

我不確定你是否想把它限制在課堂上,但那應該是你所描述的。

你的意思是這樣的:

public static void add<T>(this List<T> list, T obj)
{
    list.Add(obj);
}

我認為Marc Gravell回答得最好 ,但我會補充:

根本不要這樣做。 沒有優勢:

myList.add(obj);

VS

myList.Add(obj);

這里唯一的“優勢”是大多數開發人員對你的C#看起來都不對。 如果您要從Java移植到C#,那么值得花些額外的時間讓您的方法看起來像原生.NET方法一樣工作。

最通用的方式:

public static void add<T>(this ICollection<T> list, T obj) // use ICollection<T>
{
    list.Add(value);
}

@Dreamwalker,你的意思? list.Add(obj);

暫無
暫無

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

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