C# 当与代码的其余部分内联编写时,扩展列表不起作用
我正试图实现thsi线程关于如何随机化列表的格林纳达响应:。解决方案包括创建扩展列表。以下是在我自己的代码中编写的确切方式:C# 当与代码的其余部分内联编写时,扩展列表不起作用,c#,asp.net,visual-studio-2010,extension-methods,C#,Asp.net,Visual Studio 2010,Extension Methods,我正试图实现thsi线程关于如何随机化列表的格林纳达响应:。解决方案包括创建扩展列表。以下是在我自己的代码中编写的确切方式: static class MyExtensions { static readonly Random Random = new Random(); public static void Shuffle<T>(this IList<T> list) { Random rng = new Random()
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;
}
}
}
静态类MyExtensions
{
静态只读随机=新随机();
公共静态无效洗牌(此IList列表)
{
随机rng=新随机();
int n=list.Count;
而(n>1)
{
n--;
int k=下一个(n+1);
T值=列表[k];
列表[k]=列表[n];
列表[n]=值;
}
}
}
问题是,当我尝试在触发所述事件时创建的列表上的按钮单击事件中运行该方法时,VS无法识别该方法并产生以下错误:
System.Collections.Generic.IList不包含“Shuffle”的定义,并且找不到接受“System.Collections.Generic.IList”类型的第一个参数的扩展方法“Shuffle…”
以下是我尝试的用法,以供参考:
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...
}
public void按钮1\u单击(对象发送者,事件参数e)
{
IList dayList=新列表();
对于(int i=0;i<32;i++)
{
日清单。添加(i);
}
dayList.Shuffle();
更多代码。。。
}
我搜索了这些板,发现我需要声明扩展方法所在的名称空间,但我的名称空间与我页面的其余部分是内联的,因此没有名称空间可声明。建议?是否确实要在使用它的表单类中导入MyExtensions。是否确实要导入MyExtensions In使用它的表单类。在MyExtensions文件中搜索:
namespace MyApp.Namespace
{
现在,在表单顶部添加以下内容:
using MyApp.Namespace;
当然,MyApp.Namespace
只是您的名称空间的占位符。
如果您的扩展位于不同的项目中,则必须添加对此项目的引用。
您可能还希望将您的
MyExtensions
公开。在MyExtensions文件中搜索:
namespace MyApp.Namespace
{
现在,在表单顶部添加以下内容:
using MyApp.Namespace;
当然,MyApp.Namespace
只是您的名称空间的占位符。
如果您的扩展位于不同的项目中,则必须添加对此项目的引用。
你可能还想公开你的
MyExtensions
。这可能在评论中得到证实,这听起来像是一个可能的疏忽。我是C#的新手,所以我真的不知道我必须这么做。你能给我指出正确的方向吗?只要在表单名称空间的开头使用MyExtensions就可以了我在评论中提到了这听起来像是一个可能的疏忽。我是C#的新手,所以我真的不知道我必须这么做。你能给我指出正确的方向吗?只需在表单名称空间的开头使用MyExtensions。MyExtensions扩展与我页面的其余部分内联,与buttonclick事件嵌套在同一个标记中我试着调用它。然后更改它。显然没有办法按照你的方式来做:这是一篇有用的文章。好的,记住这一点,我将在我的当前项目中创建一个单独的名称空间,并像其他名称空间一样调用它。谢谢!MyExtensions扩展与我页面的其余部分内联,与buttonclick事件嵌套在同一个标记中在这篇文章中,我尝试调用它。然后更改它。显然,没有办法按照您的方式进行操作:这是一篇有用的文章。好的,记住这一点,我将在当前项目中创建一个单独的名称空间,并像其他名称空间一样调用它。谢谢!