あなたが探している一般的な用語は"delegate"です。predicate(item) = someValue;
C# のようなことを直接行うことはできませんが、 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);
}