0

私は次の方法を持っています:

private static object[] GenerateParameters(MethodBase executingMethod)
{
    var parameterInfoList = MethodBase.GetCurrentMethod().GetParameters();
    var parameterObjectList = new List<object>();

    for (var i = 0; i < parameterInfoList.Count(); i++)
    {
        parameterObjectList.Add(parameterInfoList.GetValue(i));
    }

    return parameterObjectList.ToArray();
}

肥大化していて複雑すぎるように思えます。このメソッドを同じことを行う1行または2行のコードに変換する方法はありますか?おそらくLambdaまたはLINQを使用しています。

それが非常に肥大化していると思う理由は、各parameterInfoではなくparameterInfo配列からのみパラメーターの値を取得できるためです(parameterInfoにはGetValueがありません)。これを行うには、より良い方法が必要です。

編集

たくさんの素晴らしい答えがあり、それぞれがうまくいきましたので、皆さんに感謝します。

4

4 に答える 4

2

これをチェックして

 return MethodBase.GetCurrentMethod().GetParameters().ToArray <object>();
于 2012-08-31T06:51:40.400 に答える
0
return Enumerable.Repeat<object>(parameterInfoList.GetValue(0), parameterInfoList.Count).ToArray();
于 2012-08-31T06:46:45.500 に答える
0

parameterInfoList.GetValue(0)実際にある必要があると仮定しますparameterInfoList.GetValue(i)か?

var parameterInfoList = MethodBase.GetCurrentMethod().GetParameters();
return Enumerable.Range(0, parameterInfoList.Count()).Select(x => parameterInfoList(x)).ToArray();
于 2012-08-31T06:49:18.167 に答える
0
  1. このメソッドに引数として渡されたメソッドのパラメーターリストを返したいと思いますが、常にGenerateParametersそれ自体のパラメーターを返しています。したがって、代わりにparameterInfoListを使用する必要がありますexecutingMethod

  2. GetValue(0)の代わりに、パラメーター配列に最初の要素のみを追加していますGetValue(i)

しかし、あなたは を返したいだけParameterInfo[]なので、これほど簡単ではありませんか?

private static ParameterInfo[] GenerateParameters(MethodBase executingMethod)
{
    return executingMethod.GetParameters().ToArray();
}

これは不要な方法であるため、要件を誤解している可能性があります。

于 2012-08-31T06:58:57.887 に答える