次のネストされたループを条件付きでより読みやすいLINQステートメントに変換しようとしています。ネストされたループをLINQに変換する際の問題
IEnumerable<PropertyInfo> testClassPageObjects = FindPageObjects();
T newControl = default(T);
Parallel.ForEach(testClassPageObjects, (pageObject,state) =>
{
Type pageObjectType = pageObject.PropertyType;
var pageObjectControls = pageObjectType.GetFields();
foreach (var control in pageObjectControls.Where(control => control.FieldType == typeof(T)))
{
if (control.Name == fieldNameNoSpaces)
{
var findsByAttribute = (FindsByAttribute) control.GetCustomAttribute(typeof(FindsByAttribute));
newControl = (T) control
.FieldType
.GetConstructor(new[] {typeof(IWebDriver), typeof(By)})
.Invoke(new object[] {driver, findsByAttribute.Locator});
state.Break();
}
}
});
可能であれば、LINQ文の前にあるすべてのif文が必要です。ステートメントは、最初の一致を返す必要があります。この場合、Parallel.ForEachとforeachを使用する必要はありません。
多くのありがとう、
'&& control.Name == fieldNameNoSpaces'を' Where() '条件に追加することから始めることができます。私はあなたがなぜ半分の条件を1つの場所に、残りの条件を別の場所に持つのか分かりません。 – itsme86
何を試しましたか?これはアウトソーシングサイトではありません* – barakcaf