0

ジェネリック型に Where を使用するのを手伝ってくれる人はいますか? double型またはint型の数でSTを実行する関数を作成しようとしていたので、それは汎用関数であるべきだと言いました。しかし、そのジェネリック型の変数に値を割り当てようとすると、数値型ではないためできません。また、Where を使用して int または double データ型からジェネリック型を継承することはできません。

コードは次のとおりです。
public static T[,] Unit(int n) where T : PROBLEM
{

    T[,] mat = new T[n, n];  

    for (int i = 0; i < n; i++)   
        mat[i, i] = (T)1;      

    return mat;

}

誰でも助けることができますか?

4

4 に答える 4

1

この「どこ」が何を参照しているのかわかりませんが、ジェネリック関数を次のように宣言できます

public T Calculate<T>(T x, T y) where T : IComparable<T>
{
    // do calculations
}

私は信じてintおり、double両方とも実装していIComparable<T>ます。

于 2010-09-22T03:55:18.083 に答える
1

Generics の制約システムは、まだかなり粗いものです。選択できるオプションが比較的少ない、まだ鈍いツールです。型パラメーターの制約を表現するためのより豊富な機能セットにより、パターンベースのプログラミングなどのように、あらゆる種類の洗練されたアルゴリズムを設計できます。

Tが私が見ているシャツのタイプだとだけ言ったら... 私ができることはあまりありません. しかし、T がシャツであるだけでなく、30 代以上のカウントを持ついくつかの int[] プロパティと、サブスクライブしてカスタム コードで処理できる特定のイベントを持つフーターによって実際に着用されている場合、プログラミングがもう少し楽しくなると思います。そして活気があります。

于 2010-09-22T06:37:02.133 に答える
1

残念ながら、C# の欠点の 1 つは、一般的な数値アルゴリズムを簡単に作成できないことです。MSDN の次の例を使用するように、ハックすることができます。

public abstract class BaseCalculator<T>
{
   public abstract T Add(T arg1,T arg2);
   public abstract T Subtract(T arg1,T arg2);
   public abstract T Divide(T arg1,T arg2);
   public abstract T Multiply(T arg1,T arg2);
}
public class IntCalculator : BaseCalculator<int>
{
   public override int Add(int arg1, int arg2)
   {
      return arg1 + arg2;
   }
   //Rest of the methods 
} 

しかし、一般的に言えば、.Net ライブラリは、ジェネリックを使用しようとするのではなく、この種のことに対して別の実装を持っているだけです。

于 2010-09-22T04:16:45.917 に答える
0

ジェネリック型パラメーターをstructに制約できます。Struct は int や double などの値型を表します。MSDN 記事の例を次に示します。

public class MyClass<T> where T : struct 

{...}
于 2010-09-22T03:54:30.070 に答える