C# で汎用関数を作成する

Muhammad Maisam Abbas 2023年10月12日
  1. C# で関数のオーバーロードを使用して汎用関数を作成する
  2. C# で T クラスを使用して汎用関数を作成する
C# で汎用関数を作成する

このチュートリアルでは、C# で汎用リターンタイプの関数を作成する方法について説明します。

C# で関数のオーバーロードを使用して汎用関数を作成する

同じ関数を異なるデータタイプに適用する必要があるシナリオに直面した場合、その問題に対して複数の解決策をとることができます。

最初の解決策は関数のオーバーロードです。ここでは、同じ名前で異なるリターンタイプや異なるパラメータを持つ複数の関数を作成します。

次のコードスニペットは、C# で関数のオーバーロードを使用して汎用関数を実現する方法を示しています。

class myClass {
  public int div(int a, int b) {
    return a / b;
  }
  public double div(double a, double b) {
    return a / b;
  }

  public static void Main(String[] args) {
    myClass ob = new myClass();

    int result1 = ob.div(12, 2);
    Console.WriteLine(result1);
    double result2 = ob.div(13, 2.5);
    Console.WriteLine(result2);
  }
}

出力:

6
5.2

C# で整数と 10 進数の除算を処理する、同じ名前の 2つの異なる関数 div() を定義しました。同様に、より多くのケースを処理するために、より多くの関数を作成できます。

この方法の利点は、すべてのデータタイプで同じことを行う必要がないことです。1つのデータタイプで 1つのことを実行し、他のデータタイプで反対のことを実行できます。

それはすべて私たちのシナリオとニーズに依存します。

このアプローチの明らかな欠点は、多くのコードを記述しなければならないことです。この問題は、同じことを行うが、すべてのデータタイプをカバーする必要がある場合に明らかになります。

C# で T クラスを使用して汎用関数を作成する

このアプローチは、すべてのデータタイプに対して同じことを行い、多くのケースを処理する必要があるシナリオに最適です。

このタイプのタスクの例は、データベースからのデータの読み取りです。ここでは、1つの列のデータ型は同じであることがわかっていますが、事前にデータ型や列についてはわかりません。

C# では、汎用関数は型パラメーターT で宣言される関数です。このタイプパラメータ T は、関数を呼び出して関数タイプを定義するときに使用されます。

毎回、タイプパラメータとして異なるデータタイプで同じ関数を呼び出すことができます。

次のコードスニペットは、type パラメータを使用して、C# で汎用の戻り型を持つ関数を宣言して使用する方法を示しています。

static T changeType<T>(string v) {
  return (T)Convert.ChangeType(v, typeof(T));
}
string s = "92";
int ci = changeType<int>(s);
float cf = changeType<float>(s);
decimal cd = changeType<decimal>(s);
Console.WriteLine(ci);
Console.WriteLine(cf);
Console.WriteLine(cd);

出力:

92
92
92

上記のコードでは、タイプパラメータ T を使用して関数 changeType<T>() を宣言しました。この関数は、文字列変数 v を入力パラメーターとして受け取り、入力パラメーターv のデータタイプを T に変換し、結果を T にキャストして返します。

出力は、文字列 92 データタイプをそれぞれ整数、浮動小数点数、および小数に変更しようとするとどうなるかを示しています。

このアプローチの問題は、文字列がタイプパラメータ T にタイプキャストできない場合、ランタイムエラーが発生することです。

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Csharp Data Type