【问题标题】:Is there a way to turn this small method into a lambda or linq statement?有没有办法把这个小方法变成 lambda 或 linq 语句?
【发布时间】:2012-08-31 06:33:01
【问题描述】:

我有以下方法:

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)。必须有更好的方法来做到这一点。

编辑

有很多很棒的答案,每个人都有效,所以谢谢大家。

【问题讨论】:

  • GetValue(0) 或者更确切地说是GetValue(i)?
  • 修复它,我粘贴了我的测试版本并忘记更改它。

标签: linq c#-4.0 reflection lambda refactoring


【解决方案1】:

检查一下

 return MethodBase.GetCurrentMethod().GetParameters().ToArray <object>();

【讨论】:

  • 谢谢,当我在 Visual Studio 中查看此内容时,我不确定我是如何错过“ToArray”的。凌晨 3 点不编程的理由!
【解决方案2】:
return Enumerable.Repeat<object>(parameterInfoList.GetValue(0), parameterInfoList.Count).ToArray();

【讨论】:

    【解决方案3】:

    假设parameterInfoList.GetValue(0) 实际上必须是parameterInfoList.GetValue(i)

    var parameterInfoList = MethodBase.GetCurrentMethod().GetParameters();
    return Enumerable.Range(0, parameterInfoList.Count()).Select(x => parameterInfoList(x)).ToArray();
    

    【讨论】:

      【解决方案4】:
      1. 我假设您想要返回作为参数传递给此方法的方法的参数列表,但您总是返回 GenerateParameters 本身的参数。所以你应该使用executingMethod,而不是parameterInfoList

      2. 您只是将第一个元素添加到参数数组中,GetValue(0) 而不是GetValue(i)

      但是既然你只想返回ParameterInfo[] 是不是就这么简单?

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

      也许我误解了你的要求,因为这是一种不必要的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-17
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多