您正在尋找的一般術語是"delegate"。雖然您不能直接在C#中使用predicate(item) = someValue;
之類的東西,但您可以使用Action
s和/或Func
s來完成您正在嘗試執行的操作。獲得價值觀是更常用的做事方式,例如LINQ的Select
能等來實現:
public static IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TResult> selector
)
{
foreach (var item in source)
yield return selector(item);
}
,並使用類似:
myList.Select(x => x.Field1);
您可以定義的東西,可以設置屬性,如:
public static void SetAll<TSource, TProperty>(
this IEnumerable<TSource> source,
Action<TSource, TProperty> setter,
TProperty someValue // example for how to get the value
)
{
foreach (var item in source)
{
setter(item, someValue);
}
}
而且使用它像:
myList.SetAll((x, value) => x.Property1 = value, "New value");
// all Property1s are now "New value"
或者喜歡的東西你的例子:
Action<MyClass, string> predicate;
if (condition1)
predicate = (x, value) => x.Property1 = value;
else
predicate = (x, value) => x.Property2 = value;
foreach (var item in ListOfItems)
{
predicate(item, someValue);
}
我認爲你正在尋找一個「屬性選擇表達」。 – Styxxy
如果'Field1'和'Field2'有不同的類型呢? –
在我的情況下,他們是同一類型。 – Anarion