programing tip

Action ()에서 값을 반환하는 방법은 무엇입니까?

itbloger 2020. 10. 23. 07:37
반응형

Action ()에서 값을 반환하는 방법은 무엇입니까?


이 질문에 대한 답변과 관련하여 DataContext를 Action ()에 전달하려면 action (db)에서 값을 어떻게 반환합니까?

SimpleUsing.DoUsing(db => { 
// do whatever with db 
}); 

다음과 더 비슷해야합니다.

MyType myType = SimpleUsing.DoUsing<MyType>(db => { 
// do whatever with db.  query buit using db returns MyType.
}); 

정적 메서드는 다음에서 이동해야합니다.

public static class SimpleUsing
{
    public static void DoUsing(Action<MyDataContext> action)
    {
        using (MyDataContext db = new MyDataContext())
           action(db);
    }
}

에:

public static class SimpleUsing
{
    public static TResult DoUsing<TResult>(Func<MyDataContext, TResult> action)
    {
        using (MyDataContext db = new MyDataContext())
           return action(db);
    }
}

이 답변은 주석에서 나왔기 때문에 코드를 제공 할 수있었습니다. 자세한 내용은 아래 @sll의 답변을 참조하십시오.


Func<T, TResult>일반 대리자 를 사용할 수 있습니다 . ( MSDN 참조 )

Func<MyType, ReturnType> func = (db) => { return new MyType(); }

또한 반환 값을 고려하는 유용한 일반 대리자가 있습니다.

  • Converter<TInput, TOutput>( MSDN )
  • Predicate<TInput>-항상 bool 반환 ( MSDN )

방법:

public MyType SimpleUsing.DoUsing<MyType>(Func<TInput, MyType> myTypeFactory)

일반 대리자 :

Func<InputArgumentType, MyType> createInstance = db => return new MyType();

실행 :

MyType myTypeInstance = SimpleUsing.DoUsing(
                            createInstance(new InputArgumentType()));

또는 명시 적으로 :

MyType myTypeInstance = SimpleUsing.DoUsing(db => return new MyType());

람다 또는 익명 메서드가 둘러싸는 범위의 변수를 닫을 수 있다는 사실을 활용할 수도 있습니다.

MyType result;

SimpleUsing.DoUsing(db => 
{
  result = db.SomeQuery(); //whatever returns the MyType result
}); 

//do something with result

사용 Func<T>보다는 Action<T>.

Action<T> acts like a void method with parameter of type T, while Func<T> works like a function with no parameters and which returns an object of type T. If you wish to give parameters to your function, use Func<TParameter1, TParameter2, ..., TReturn>.

참고URL : https://stackoverflow.com/questions/8099631/how-to-return-value-from-action

반응형