【发布时间】:2018-09-21 16:59:11
【问题描述】:
我想知道,是否可以通过params object[] values 获取传递给方法的变量名称?
方法的签名是这样的:
public static void ExecuteSafely(
Action callback,
string command,
params object[] values)
{
// code here
}
我试图通过nameof(values[index]) 获取值,但它告诉我:
表达式没有名称。
这里的重点是动态的给SQL命令添加参数,如果我可以根据params的名字来添加参数会更容易,传递的参数也更少,但是这些参数的数量参数应该是可变的。
您能推荐任何解决方案或其他方法吗?
【问题讨论】:
-
使用字典或匿名对象。
-
@poke 你的意思是而不是
object像(string name, object value)? -
一个字典,即
Dictionary<string, object>,或者只是一个object,您使用反射来检索属性名称和值。所以你要么调用方法Foo(new Dictionary<string, object> { ["foo"] = 2, ["bar"] = "hello" })要么Foo(new { foo = 2, bar = "hello" }) -
看来是合法的,我会试试看
-
一定有办法做到这一点吧?我正在查看一个新的 StackTrace() 以及它的框架、方法、ParameterInfos 等,并且......没有运气。我猜当编译器编译代码时,转换为对象数组的变量以及这些变量的名称不会保留在堆栈跟踪中?但也许他们在那里的某个地方?!?