8

質問

ParameterInfo で指定された型のデフォルトを動的に取得しようとしています。_methods[メソッド名] は MethodInfo オブジェクトを返します。

残念ながら、コンパイラはデフォルト (paramType) 内の「paramType」ビットを好みません。私は困惑しています。

エラー

型または名前空間名 'paramType' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

C:\Applications\...\MessageReceiver.cs 113 行目

object blankObject = null;
foreach (var paramInfo in _methods[methodName].Key.GetParameters())
{
    if (paramInfo.Name == paramName)
    {
        Type paramType = paramInfo.ParameterType;
        blankObject = (object)default(paramType);
    }
}
parameters[i] = blankObject;
4

2 に答える 2

27

実装は非常に簡単です。

public object GetDefault(Type type)
{
    return type.IsValueType ? Activator.CreateInstance(type) : null;
}
于 2009-01-23T22:26:40.960 に答える
1

デフォルトは実際の型でのみ機能すると思います。これは、実際のメソッドではなく、コンパイラのショートカットです。ジェネリックでうまく機能します。例えば:

public void MyMethod<T>(T obj)
{
   T myvar = default(T);
}

私がしばらく前に投稿したこの質問をチェックしてください:

ジェネリックのデフォルト値

于 2009-01-23T22:22:22.653 に答える