1

我正在尝试从 thsi 线程中实现手榴弹对如何随机化列表的响应:Randomize a List<T>。该解决方案包括创建扩展列表。这是用我自己的代码编写的确切方式:

    static class MyExtensions
{
    static readonly Random Random = new Random();
    public static void Shuffle<T>(this IList<T> list)
    {
        Random rng = new Random();
        int n = list.Count;
        while (n > 1)
        {
            n--;
            int k = rng.Next(n + 1);
            T value = list[k];
            list[k] = list[n];
            list[n] = value;
        }
    }
}

问题在于,当我尝试在触发所述事件时创建的列表上的按钮单击事件中运行该方法时,VS 无法识别该方法并产生此错误:

System.Collections.Generic.IList 不包含“Shuffle”的定义,并且没有扩展方法“Shuffle”接受“System.Collections.Generic.IList”类型的第一个参数......”

这是我尝试使用的参考:

    public void Button1_Click(object sender, EventArgs e)
    {


    IList<int> dayList = new List<int>();
    for (int i = 0; i < 32; i++)
    {
        dayList.Add(i);
    }

    dayList.Shuffle();

    More code...

    }

我搜索了这些板,发现我需要声明扩展方法所在的命名空间,但我的与我页面的其余部分内联,所以没有命名空间要声明。建议?

4

2 回答 2

1

are you sure you are importing MyExtensions in the form class where you are using it.

于 2013-03-13T11:18:31.610 回答
0

在您的 MyExtensions 文件中搜索此内容:

namespace MyApp.Namespace
{

现在将其添加到表单的最顶部:

using MyApp.Namespace;

MyApp.Namespace当然,它只是您的命名空间的占位符。如果您的扩展位于不同的项目中,则必须添加对该项目的引用。您可能还想MyExtensions公开您的信息。

于 2013-03-13T11:24:40.293 回答