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();
}

在我看来,这是臃肿和过于复杂。有没有办法把这个方法变成一两行代码来做同样的事情?可能使用 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 回答