2016-07-17 4 views
0

Bonjorno、人々。ジェネリックメソッド内で操作を実行する方法を教えてください。私はさまざまな符号なし整数のランダムな配列が必要です。 IDEでは、Double(および他のもの)に汎用構造体を掛けることはできません。タイプキャスティングは私が試して何らかの方法で動作しません。 多分、私は自転車の設計を止めて、整数型ごとにいくつかのメソッドのうち汎用メソッドから呼び出す方がいいでしょうか?C#の一般的な方法での計算(不明と知られている)

public static T[] getRandArray<T>(int amount) where T: struct 
{ 
    FieldInfo maxValueField = 
     typeof(T).GetField(
      "MaxValue", 
      BindingFlags.Public | BindingFlags.Static 
     ); 

    T maxValueOfT = (T)maxValueField.GetValue(null); 

    Random randNum = new Random(); 

    T[] array = new T[amount]; 

    for (int i = 0; i < amount; i++) 
    { 
     array[i] = (T)(randNum.NextDouble()) * maxValueOfT; 
    } 

    return array; 
} 
+0

これは既にここで本当によく説明されています - http://stackoverflow.com/a/10951577/6599219 –

答えて

0

ジェネリックでは機能しません。

  • メソッドの結果としてuint[]だけが必要な場合は、ジェネリックタイプをそれに置き換えてください。
  • uint[]だけでなく、他のタイプの配列(例: int[]あなたのメソッドのオーバーロードを作成する必要があります。

残念ながら、あなたがいくつかの数学を行うことを可能にするジェネリックタイプに与えることができる制約はありません。

Btw。静的クラスの静的フィールドとしてRandomのインスタンスを作成し、そのメソッドで使用することをお勧めします。

0

一般的な方法のみを汎用にする必要があります。定義されている唯一の制約はT:structです。私は次のように定義するとします

public struct Point 
{ 
    public int X { get; set; } 
    public int Y { get; set; } 
} 

私はgetRandArrayにPointを供給することができますが、どのようにそれを使うのですか?

むしろ、ニーズに合ったタイプを選択してください。あなたが供給しているインターフェイスが適切である場合、あなたはしばしば暗黙のコンバージョンを利用して目標を達成することができます

関連する問題