1

これは、私が理解しようとしている C# のコードです。クラスには、インターフェイスで使用できる次のメソッドがあります。

T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value);

dotPeek を使用してこのクラスの使用法を確認すると、これが表示されます。

 public T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value)
{
  return (T) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}

このメソッドを呼び出すにはどうすればよいですか? T と S を何に置き換える必要がありますか?

4

5 に答える 5

2

このメソッドは、一般化されたルックアップ関数として表示されます。実装が実際に任意の型を処理できる場合は、S と T に任意の型を使用できます。

例:

string result = GetLookupValue<string, int>("tname", "fname", "luname", 42);

MyClass result = GetLookupValue<MyClass, string>("tname", "fname", "luname", "blah");
于 2012-08-15T17:33:31.203 に答える
1

T は戻り値の型で、 S は何らかの値として内部で使用される型のようです。

したがって、T と S の TYPES を指定する必要があります。

SomeType result = GetLookupValue<SomeType, SomeValueType>(...);
于 2012-08-15T17:36:16.303 に答える
1

タイプ T と S はタイプです。このメソッドを呼び出して結果を保存するには、次を使用します。

SomeClass returnedObject = GetLookupValue<SomeClass, SomeOtherType>("", "", "", "");

このメソッドは、T に入力したものと同等の型を返します。

于 2012-08-15T17:34:52.550 に答える
1

これは、これが何であるかであるC#ジェネリックの優れた紹介です。

基本的に、T と S を必要なものに置き換えるだけです。T は戻り値の型で、S は最終パラメーターに使用される型になります ( value)

例えば:

var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);

これにより、より堅牢なコードが可能になります。メソッドを必要に応じて成形できる場所

ジェネリックは、次のように何でも入れることができますList<T>

List<String> stringList = new List<String>();
List<int> intList = new List<int>();
...

コンパイル時に、ジェネリックの値がコードに組み込まれます。したがって、上記の例で dotPeek を実行すると、次のように表示されます。

public MyObject GetLookupValue<MyObject, MyOtherObject>(string sTName, string sFName, string sLuName, MyOtherObject value)
{
  return (MyObject) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}

***しかし、これを書き出すと、パラメーターをジェネリックとして持つことは、 ..にvalueキャストされているだけなので、かなり無意味に思えます。(これにより、最終的に値オブジェクト (int、double など) をボックス化できます)objectT GetLookupValue<T>(string sTName, string sFName, string sLuName, object value);

于 2012-08-15T17:33:43.180 に答える
1

このメソッドを呼び出すにはどうすればよいですか?

これは、使用するタイプによって異なります。例えば:

int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");
于 2012-08-15T17:33:46.533 に答える