gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:11:27 25 4
gpt4 key购买 nike

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

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

关于c# - 如何简化此方法的表达式参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15385311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com