是否可以获取作为“ params object []”传递的变量的名称?

时间:2018-09-21 08:48:48

标签: c# .net

我想知道是否有可能通过params object[] values传递给方法的变量名?

方法的签名如下:

public static void ExecuteSafely(
    Action callback,
    string command,
    params object[] values)
{
    // code here
}

我试图通过nameof(values[index])获取值,但是它告诉我:

  

表达式没有名称。

这样做的目的是向SQL命令动态添加参数,如果我可以基于 params 的名称添加参数,则传递参数会更容易且传递的次数更少,但是这些参数的数量参数应该是可变的。

您能为此推荐任何解决方案或其他方法吗?

1 个答案:

答案 0 :(得分:9)

不,那不可能。 nameof是一种编译时功能,您希望在运行时提供变量名称(可以动态创建数组)。

如果名称对您很重要,请使用Dictionary<string, object>C#7 a named tuple

public static void ExecuteSafely(Action callback, string command, 
    params (string name, object value)[] commandParameters)
{
    foreach ((string Name, object Value) commandParameter in commandParameters)
    {
        string name = commandParameter.Name;
        object value = commandParameter.Value;
        // ...
    }
}

以这种方式调用:

ExecuteSafely(yourAction, "CreateUser", ("UserName", "Tim Schmelter"));