繁体   English   中英

如何简化此方法的表达式参数?

[英]How can I simplify this methods expression parameters?

无论如何我可以改变这个方法,不需要对象,只需传递一个参数表达式:

protected void FillInTextFor<T>(T obj, Expression<Func<T, object>> property)
{
    var memberExpression = (MemberExpression)property.Body;
    var propertyInfo = (PropertyInfo)memberExpression.Member;
    // read value with reflection
    var value = (string)propertyInfo.GetValue(obj, null);
    // use the name and value of the property
    FillInText(propertyInfo.Name, value);
}

    protected void FillInText(String elementId, String text)
    {
        VerifyElementPresent(elementId);
        Driver.FindElement(By.Id(elementId)).Clear();
        Driver.FindElement(By.Id(elementId)).SendKeys(text);
    }

叫做像
var personToCreate = new PersonBuilder().RandomFirstName().Build(); FillInTextFor(personToCreate, a => a.FirstName);

我想能够说FillInTextFor(_ => personToCreate.FirstName); 或类似的东西

我们正在尝试为Selenium测试制作辅助方法。 我想传递一个对象并选择一个属性,它将自动使用属性的名称作为元素id,将文本作为字符串的值。

您可以像这样创建一个重载:

protected void FillInTextFor<T>(Expression<Func<T>> property)
{
    var memberExpression = (MemberExpression)property.Body;
    var propertyInfo = (PropertyInfo)memberExpression.Member;
    var compiled = property.Compile();
    var value = compiled();
    FillInText(propertyInfo.Name, value as string);
}

并使用以下方式调用:

var personToCreate = new PersonBuilder().RandomFirstName().Build();
FillInTextFor(() => personToCreate.FirstName);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM