Что такое эквивалент C# Java 8 java.util.function.Consumer<>?
Есть ли эквивалент этого интерфейса в C#?
Пример:
Consumer<Byte> consumer = new Consumer<>();
consumer.accept(data[11]);
Я искал вокруг Func<>
а также Action<>
но я понятия не имею.
Оригинальный код Java Consumer.accept()
Интерфейс довольно прост. Но не для меня:
void accept(T t);
/**
* Returns a composed {@code Consumer} that performs, in sequence, this
* operation followed by the {@code after} operation. If performing either
* operation throws an exception, it is relayed to the caller of the
* composed operation. If performing this operation throws an exception,
* the {@code after} operation will not be performed.
*
* @param after the operation to perform after this operation
* @return a composed {@code Consumer} that performs in sequence this
* operation followed by the {@code after} operation
* @throws NullPointerException if {@code after} is null
*/
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
2 ответа
Решение
"Интерфейс потребителя представляет операцию, которая принимает один входной аргумент и не возвращает результата"
Ну, при условии, что эта цитата, взятая отсюда, является точной, это примерно эквивалент Action<T>
делегировать в C#;
Например, этот код Java:
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<String> c = (x) -> System.out.println(x.toLowerCase());
c.accept("Java2s.com");
}
}
В C# будет:
using System;
public class Main
{
static void Main(string[] args)
{
Action<string> c = (x) => Console.WriteLine(x.ToLower());
c.Invoke("Java2s.com"); // or simply c("Java2s.com");
}
}
Consumer<T>
соответствует Action<T>
и andThen
Метод является оператором последовательности. Вы можете определить andThen
в качестве метода расширения, например
public static Action<T> AndThen<T>(this Action<T> first, Action<T> next)
{
return e => { first(e); next(e); };
}