相关文章推荐
重情义的电池  ·  Android ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I have searched around Func<> and Action<> but I have no idea.

The original Java code of Consumer.accept() interface is pretty simple. But not for me:

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); };
                It is java code and we are c# programer and this interface is not the simple to us : ) Waht this cosumer do?
– blogprogramisty.net
                Apr 6, 2016 at 11:10
                Any delegate type that takes one parameter and does not return a value would be a candidate. Action<T> is one of them.
– Dennis_E
                Apr 6, 2016 at 11:17
                What are you looking for? The question doesn't make any sense as it is. There are lambdas, callbacks, Observables, LINQ all of which could do whatever you use Consumer.accept for
– Panagiotis Kanavos
                Apr 6, 2016 at 11:22
                @PanagiotisKanavos action.Invoke(parameter) is the same thing as consumer.accept(parameter). They just gave them different names. But I realize that's not the op's question.
– Dennis_E
                Apr 6, 2016 at 11:35

"Consumer interface represents an operation that accepts a single input argument and returns no result"

Well, provided that the quote above taken from here is accurate it’s roughly an equivalent of Action<T> delegate in C#;

For example this java code:

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");

Converted to C# would be:

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> corresponds to Action<T> and the andThen method is a sequencing operator. You can define andThen as an extension method e.g.

public static Action<T> AndThen<T>(this Action<T> first, Action<T> next)
    return e => { first(e); next(e); };
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.