2

特定の署名に準拠するすべての静的メソッドを (コンストラクターで) 収集する抽象クラスを作成しています。収集するメソッドは次のようになります。

static ConversionMerit NAME(TYPE1, out TYPE2, out string)

名前付けや最初の 2 つのパラメーターの型は気にしませんが、2 番目と 3 番目のパラメーターは「out」パラメーターである必要があり、3 番目のパラメーターは System.String 型である必要があります。

私の問題は、文字列性の最終チェックにあります。

MethodInfo[] methods = GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
  foreach (MethodInfo method in methods)
  {
    if (method.ReturnType != typeof(ConversionMerit))
      continue;

    ParameterInfo[] parameters = method.GetParameters();
    if (parameters.Length != 3)
      continue;

    if (parameters[0].IsOut) continue;
    if (!parameters[1].IsOut) continue;
    if (!parameters[2].IsOut) continue;

    // Validate the third parameter is of type string.
    Type type3 = parameters[2].ParameterType;
    if (type3 != typeof(string))   // <-- type3 looks like System.String&
      continue;

    // This is where I do something irrelevant to this discussion.
  }

3 番目の ParameterInfo の ParameterType プロパティは、型が System.String& であり、typeof(string) との比較に失敗したことを示しています。このチェックを実行する最良の方法は何ですか? 文字列比較を使用して型名を比較するのは、私には少しばかげているように思えます。

4

2 に答える 2