【问题标题】:How to get the name of a parameter? [duplicate]如何获取参数的名称? [复制]
【发布时间】:2018-11-25 00:40:31
【问题描述】:

我有一个参数d。我想在错误消息中使用参数的名称:

void foo(string d)
{
    // this does not work
    string message string.Format("Parameter {0} is missing please verify inputs", d));
} 

如何获取参数的名称?

【问题讨论】:

    标签: c# string format isnullorempty


    【解决方案1】:

    你可以使用nameof:

    string nameOfD = nameof(d);
    

    请注意,这不会给出用于调用方法的变量的名称,它仅适用于局部变量。在这种情况下,nameof 将始终返回 "d"

    【讨论】:

      【解决方案2】:

      您可以使用 Lambda 表达式:

      static void Main( string[] args ) {
          int A = 50, B = 30, C = 17;
          Print( () => A );
          Print( () => B );
          Print( () => C );
      }
      
      static void Print<T>( System.Linq.Expressions.Expression<Func<T>> input ) {
          System.Linq.Expressions.LambdaExpression lambda = (System.Linq.Expressions.LambdaExpression)input;
          System.Linq.Expressions.MemberExpression member = (System.Linq.Expressions.MemberExpression)lambda.Body;
      
          var result = input.Compile()();
          Console.WriteLine( "{0}: {1}", member.Member.Name, result );
      }
      

      试试这个。

      【讨论】:

        【解决方案3】:

        您可以使用String.IsNullOrEmpty(variable)?nameof(variable):String.Empty 的串联。所以你会得到

        var str = String.Join(',', new List<String> 
          {
            String.IsNullOrEmpty(a)?nameof(a):String.Empty,
            String.IsNullOrEmpty(b)?nameof(b):String.Empty,
            String.IsNullOrEmpty(c)?nameof(c):String.Empty,
            String.IsNullOrEmpty(d)?nameof(d):String.Empty
        });
        string.Format("Parameter {0} is missing please verify inputs", str);
        

        【讨论】:

          猜你喜欢
          • 2018-01-29
          • 1970-01-01
          • 2020-08-19
          • 2011-02-13
          • 2012-04-25
          • 1970-01-01
          • 1970-01-01
          • 2012-02-16
          • 2010-09-17
          相关资源
          最近更新 更多