閉じた/構築されたジェネリックメソッドに引数値をどうやって渡すのですか?ジェネリック引数の型と値をジェネリックメソッドに渡す
私はリフレクションに触れていないので、しばらくしています。これは私の後ろにあったものでした。
class Program
{
static void Main(string[] args)
{
new ConcreteFoo().GenericMethod<int>(5);
Console.ReadKey();
}
}
class ConcreteFoo
{
public void GenericMethod<Q>(Q q)
{
var method = MethodInfo.GetCurrentMethod();
var parameters = method.GetParameters();
if (parameters.Length > 0)
foreach (var p in parameters)
Console.WriteLine("Type: {0}", p.ParameterType);
// That still prints Q as the type.
// I've tried GetGenericArguments as well. No luck.
// I want to know:
// 1) The closed type, i.e. the actual generic argument supplied by the caller; and
// 2) The value of that argument
}
public void GenericMethodWithNoGenericParameters<Q>()
{
// Same here
}
}
class GenericFoo<T>
{
public void NonGenericMethod(T t) { /* And here*/ }
public void GenericMethod<Q>(Q q) { /* And here */ }
}
UPDATE
この質問は不条理ので、アスカーによって閉鎖されています。彼はC#プログラマーであることが判明した場合、子供たちにどのように愚かなパパがいるかを示すために、それを保持したいと考えています。
'q.GetType()'を使用できない特定の理由はありますか? –
'typeof(Q)'は、現在のメソッドのランタイム提供型を提供します。もしそれがあなたが求めているものであれば... –
上記の2つのコメントの違いを明確にするために: 'q.GetType()'はオブジェクトの実際の型を取得します。つまり、サブクラスか実装'Q'がインターフェースの場合)。 'GenericMethod(1)'( 'Q'が 'Object')または' GenericMethod(1) '(' Q'は明示的に '' GenericMethod 'Int32')に代わって –