1

リストをランダム化する方法について、スレッドからの手榴弾の応答を実装しようとしています:リストをランダム化<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」の定義が含まれておらず、タイプ「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...

    }

これらのボードを検索したところ、拡張メソッドが含まれる名前空間を宣言する必要があることがわかりましたが、私のページの残りの部分とインラインであるため、宣言する名前空間がありません。提案?

4

2 に答える 2

1

MyExtensionsを使用しているフォームクラスにインポートしていますか?

于 2013-03-13T11:18:31.610 に答える
0

MyExtensionsファイルでこれを検索します。

namespace MyApp.Namespace
{

次に、フォームの一番上にこれを追加します。

using MyApp.Namespace;

MyApp.Namespaceもちろん、は名前空間の単なるプレースホルダーです。拡張機能が別のプロジェクトにある場合は、このプロジェクトへの参照を追加する必要があります。また、公開することもできますMyExtensions

于 2013-03-13T11:24:40.293 に答える