如何获取作为参数传递的变量的名称

问题描述:

是否可以获取作为参数传递的变量的名称?如何获取作为参数传递的变量的名称

当你问我解释为什么我需要这个,这里是我的解释。我正在使用硒构建测试framweork。这里是我需要那个作为参数传递的变量名称的例子。

我有场页面对象:

[FindsBy(How = How.CssSelector, Using = "input[name='sample']")] 
private IWebElement SampleButton { get; set; } 

我一下就喜欢:

Click(SampleButton, nameof(SampleButton)); 

这里是点击功能的机构,你看到上面:

public void Click(IWebElement element, string elementName) 
     { 
      element.Click(); 
      Logger.Log("Click: '{0}'", elementName); 
     } 

结果:传递给函数的按钮被点击并在日志中文件我有 “点击:SampleButton”

现在我正在寻找如何改变点击功能,它可以竟被调用,如:

Click(SampleButton) 

它看起来像:

public void Click(IWebElement element) 
     { 
      element.Click(); 
      Logger.Log("Click: '{0}'", getNameOfVariableThatWasPassedToThisParameter(element)); 
     } 

getNameOfVariableThatWasPassedToThisParameter(element)的预期结果将为string = "SampleButton"

我正在使用诸如SendKeys(SampleInput, nameof(SampleInput), valueToSet)和它会设置值并记录它的设置。所以我只想摆脱nameof(SampleInput)。我想要减少需要传递给函数的变量量。

+1

虽然有可能,但只有极少数情况下有用。可以更详细地解释你的*问题*知道传递的变量的名称不应该是必需的。 – nvoigt

+1

@nvoigt这可能吗?现在你已经注意到了...... – atlaste

+3

你可以使用[Expression](https://msdn.microsoft.com/de-de/library/system.linq.expressions.expression(v = vs.110) .aspx)来做到这一点。例如,请参阅[this](http://*.com/questions/793571/why-would-you-use-expressionfunct-rather-than-funct)。不过,我强烈怀疑你有一个XY问题。描述你的问题,而不是将解决方案视为理所当然,你可能会得到更好的答案。 – nvoigt

尝试使用

int par; 
nameof(int); // 'par' 

nameof reurn参数的名称。

+1

OP *在他们的第一个代码示例中使用*'nameof'。他们不太可能不知道它的存在。 –