【问题标题】: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);