"делегат + = метод" является оператором для многоадресного делегата для объединения метода для делегирования. В другом ручном "делегате - = метод" является оператором для удаления метода от делегата. Это полезно для Действия.
Action action = Method1;
action += Method2;
action += Method3;
action -= Method2;
action();
В этом случае, только Method1 и Method3 будут работать, Method2 не будет работать, потому что Вы удаляете метод, прежде чем вызовут делегата.
при использовании многоадресного делегата с Func результатом будет последний метод.
Func<int> func = () => 1;
func += () => 2;
func += () => 3;
int result = func();
В этом случае, результат будет 3, начиная с метода" () =>, 3 дюйма являются последним методом, добавленным к делегату. Так или иначе весь метод назовут.
В Вашем случае, метод "t => t. Сумма < 100" будет эффективным.
, Если Вы хотите объединить предикат, я предлагаю эти дополнительные методы.
public static Func<T, bool> AndAlso<T>(
this Func<T, bool> predicate1,
Func<T, bool> predicate2)
{
return arg => predicate1(arg) && predicate2(arg);
}
public static Func<T, bool> OrElse<T>(
this Func<T, bool> predicate1,
Func<T, bool> predicate2)
{
return arg => predicate1(arg) || predicate2(arg);
}
Использование
public static Func<Tran, bool> GetPredicate() {
Func<Tran, bool> predicate = null;
predicate = t => t.Response == "00";
predicate = predicate.AndAlso(t => t.Amount < 100);
return predicate;
}
РЕДАКТИРОВАНИЕ: исправьте название дополнительных методов, как Keith предполагает.
Немного опций, которые я исследовал, как ниже
import java.text.NumberFormat;
import java.util.Locale;
class NumberFormatDemo {
public static void main(String[] args) {
Double d = 45124853123456.78941;
NumberFormat nf = NumberFormat.getInstance(Locale.ITALY);
System.out.println("ITALY representation of " + d + " : " + nf.format(d));
nf = NumberFormat.getInstance(Locale.GERMANY);
System.out.println("GERMANY representation of " + d + " : " + nf.format(d));
nf = NumberFormat.getInstance(Locale.CHINESE);
System.out.println("CHINESE representation of " + d + " : " + nf.format(d));
nf = NumberFormat.getInstance(Locale.US);
System.out.println("US representation of " + d + " : " + nf.format(d));
nf = NumberFormat.getInstance(Locale.ENGLISH);
System.out.println("ENGLISH representation of " + d + " : " + nf.format(d));
nf = NumberFormat.getInstance(Locale.UK);
System.out.println("UK representation of " + d + " : " + nf.format(d));
//===================================================
//ICU4j example
com.ibm.icu.text.NumberFormat format = com.ibm.icu.text.NumberFormat.getCurrencyInstance(new Locale("en", "in"));
System.out.println("INDIA representation of " + d + " : " + nf.format(d));
}
}
, последний повторно получает следующую зависимость
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>65.1</version>
</dependency>