2016-04-06 3 views
6

Существует эквивалент этого интерфейса в C#?Что такое C# эквивалент Java 8 java.util.function.Consumer <>?

пример:

Consumer<Byte> consumer = new Consumer<>(); 
consumer.accept(data[11]); 

Я искал вокруг Func <> и действий <> но я понятия не имею ....

Оригинальный 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); }; 
    } 
+1

Это Java-код, и мы с # программируете и этот интерфейс не просто к нам:) WAHT этот cosumer? –

+2

Любой тип делегата, который принимает один параметр и не возвращает значение, будет кандидатом. 'Action ' является одним из них. –

+0

Спасибо, Деннис, но как я могу подменить прием метода? –

ответ

6

«Потребительский интерфейс представляет собой операцию, которая не принимает один входного аргумента и возвращает результата»

Ну, если эта цитата взята из here является точной, то это эквивалентно 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"); 
    } 
} 
1

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); }; 
} 
Смежные вопросы