我试图从如何随机化列表的这个线程实现手榴弹的响应:随机化列表
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...
}
我搜索了这些板,发现我需要声明扩展方法所在的名称空间,但我的名称空间与页面的其余部分内联,因此没有要声明的名称空间。建议吗?
您确定在使用MyExtensions的表单类中导入了MyExtensions
在MyExtensions文件中搜索:
namespace MyApp.Namespace
{
现在把这个添加到表单的最顶端:
using MyApp.Namespace;
当然, MyApp.Namespace
只是您的名称空间的占位符。如果您的扩展位于不同的项目中,则必须添加对该项目的引用。您可能还想将您的MyExtensions
公开。