2017-07-26 9 views
-1

私は、この質問の問題のバージョンがかなり頻繁に聞かれることを知っていますが、最後の日のフォーラムを見て、Fisher-Yatesシャッフルを実装しようとしましたが、 Entscheidungsfragen.Shuffle(this System.Collections.Generic.IList) ':エクステンションメソッドは非ジェネリックな静的クラスで定義されていなければなりません。c#randomizeリスト<action>

private static System.Random rng = new System.Random(); 

public static void Shuffle<T>(this IList<T> list) 
{ 
    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; 
    } 
} 

private static void CreateList(string[] args) 
{ 
    var scenes =new List<Action>(szene1, szene2); 
    scenes.Shuffle(); 
    foreach (Action sce in scenes) 
     sce(); 
} 

誰かが私を助けることができれば - 私はちょうど私が私が見つけたすべてのものを試してみました原因を失って以来、I'dは本当に、感謝しています。

+0

です'CreateList'からアクセス可能です。 –

答えて

3

エラーはそれを言います。あなたの拡張メソッドShuffleは、このような非ジェネリック静的クラスに移動します。ここでは

public static class ListExtensions 
{ 
    private static System.Random rng = new System.Random(); 

    public static void Shuffle<T>(this IList<T> list) 
    { 
     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; 
     } 
    } 
} 
+0

本当にありがとう、私はそんなにダムを感じています。 – Boernie

0

は、拡張クラスは `Shuffle`拡張メソッドを含むクラスは静的である必要があり、それがなければなりません

public static class ExtensionClass 
{ 
    private static System.Random rng = new System.Random(); 

    public static void Shuffle<T>(this IList<T> list) 
    { 
     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; 
     } 
    } 
} 
関連する問題