首页 > 解决方案 > 是否可以获得作为`params object []`传递的变量名称?

问题描述

我想知道,是否可以通过 获取传递给方法的变量名称params object[] values

方法的签名如下所示:

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

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

表达式没有名称。

这样做的目的是为 SQL 命令动态添加参数,如果我可以根据params的名称添加它们,传递的参数会更容易和更少,但是这些参数的数量应该是可变的。

你能推荐任何解决方案或其他方法吗?

标签: c#.net

解决方案


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

如果名称对您很重要,请使用 aDictionary<string, object>或与C#7 一起使用命名元组

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"));

推荐阅读