c# - 如何在 C# 中为泛型列表类型扩展方法指定参数

标签 c# generics parameters extension-methods

我正在尝试制作一个扩展方法,该方法将随机播放通用列表集合的内容,而不管其类型如何,但是我不确定在 <..> 之间放置什么作为参数。我放对象吗?或类型?我希望能够在我拥有的任何 List 集合上使用它。

谢谢!

public static void Shuffle(this List<???????> source)
{
    Random rnd = new Random();

    for (int i = 0; i < source.Count; i++)
    {
        int index = rnd.Next(0, source.Count);
        object o = source[0];

        source.RemoveAt(0);
        source.Insert(index, o);
    }
}

最佳答案

你需要让它成为一个泛型方法:

public static void Shuffle<T>(this List<T> source)
{
    Random rnd = new Random();

    for (int i = 0; i < source.Count; i++)
    {
        int index = rnd.Next(0, source.Count);
        T o = source[0];

        source.RemoveAt(0);
        source.Insert(index, o);
    }
}

这将允许它与任何 List<T> 一起工作.

关于c# - 如何在 C# 中为泛型列表类型扩展方法指定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280889/

相关文章:

c# - 如何在 C# 中制作/设计一个在运行时可以具有不同类型成员的类

c# - 具有泛型参数的扩展方法到泛型类

php - 如何在我自己的函数中使用混合参数类型?

c# - 以框架为目标到底意味着什么,我如何最大限度地提高兼容性?

c# - IE 和 Mozilla Firefox 之间的 JavaScript 行为差异?

c# - 将十进制列表转换为由分隔符 (',' 分隔的字符串)

java - 一般地覆盖Java中的方法

c++ - ISO C 或 C++ 标准是否指定 `const char *` 应该是 NULL 终止的字符串?

javascript - Javascript 中哪些参数顺序与运算符作为预柯里化(Currying)函数和组合?

c# - 无法通过 NUnit Mock 的 SetupSequence 使用多个返回