C#委托属性
是否可以在c#中作为委托传递属性C#委托属性,c#,C#,是否可以在c#中作为委托传递属性 我知道在C#中,我们可以将函数作为参数传递给方法,但我有一个属性,在我的情况下,它与不带参数的函数没有太大区别,我如何将它作为参数传递 public IWebElement Name => _element.FindElements(By.ClassName("field-key"))[0].FindElements(By.TagName("label"))[0]; 我正在使用硒元素和改变元素。这就是为什么我的Name属性就是这样的原因。因此,当我执行类
我知道在C#中,我们可以将函数作为参数传递给方法,但我有一个属性,在我的情况下,它与不带参数的函数没有太大区别,我如何将它作为参数传递
public IWebElement Name => _element.FindElements(By.ClassName("field-key"))[0].FindElements(By.TagName("label"))[0];
我正在使用硒元素和改变元素。这就是为什么我的Name
属性就是这样的原因。因此,当我执行类似于:multi-nationalpage.GeneralPanel.DefinitionField.name
的操作时,我总是会得到最新的名称
在防止出现陈旧元素引用异常的测试中,我使用了Thread.Sleep()
,我知道有更好的方法,但现在,这是我的方法
Thread.Sleep(5000)
multinational.EditModal.StateTracker.VerifyChanges(_multinational.GeneralPanel.DefinitionField.Name);
我想在VerifyChanges()
中执行Thread.Sleep(5000)
,这就是为什么我想将Name
属性作为委托传递给VerifyChanges(多国页面.GeneralPanel.DefinitionField.Name)
大概是这样的:
public void VerifyChanges(Func<IWebElement> Name)
{
Thread.Sleep(5000)
var name = Name;
...
}
public void VerifyChanges(函数名)
{
线程。睡眠(5000)
变量名称=名称;
...
}
如果您可以共享完整的代码,那么我们可以更好地了解您试图解决的问题。传递属性与向函数传递参数值相同。e、 让我们假设你的函数看起来像
public void MyFunction(IWebElement webElement)
{
// Your code goes here.
}
您可以按如下方式调用此函数并传递属性:
MyClass obj = new MyClass();
MyFunction(obj.Name);
我假设MyClass是具有此属性的类的名称
==========已编辑
在这种情况下,您可以将代码包装在Func中,如下所示
public void VerifyChanges(() => multinational.GeneralPanel.DefinitionField.Name);
解决方案是将对属性的访问封装在lambda中:
.EditModal.StateTracker.VerifyChanges(
()=>\u.GeneralPanel.DefinitionField.Name
);
我认为有更好的方法来解决这个问题
创建一个接口:
interface IHasName
{
IWebElement Name { get; }
}
实施:
class YourClass : IHasName
{
public IWebElement Name
=> _element.FindElements(By.ClassName("field-key"))[0].FindElements(By.TagName("label"))[0];
}
那么你的方法是:
public void VerifyChanges(IHasName hasName)
{
Thread.Sleep(5000)
var name = hasName.Name;
...
}
你不能传递一个调用属性的操作吗?你可以将函数作为参数传递,而不是getter方法。更新了问题:“但在我的情况下,我有一个属性与一个不带参数的函数没有太大的不同。”一个属性在这方面是不同的,它实际上是两个方法。因此,您还需要两个委托,一个用于获取,一个用于设置值。