반응형
익명 메서드로 값을 반환하는 방법은 무엇입니까?
이것은 실패합니다
string temp = () => {return "test";};
오류와 함께
람다식이 대리자 형식이 아니기 때문에 '문자열'형식으로 변환 할 수 없습니다.
오류의 의미는 무엇이며 어떻게 해결할 수 있습니까?
여기서 문제는 a를 반환하는 익명 메서드를 정의 string
했지만 string
. 호출 될 때 string
직접 생성 되지 않는 표현식입니다 string
. 호환되는 대리자 유형에 할당되어야합니다. 이 경우 가장 쉬운 선택은Func<string>
Func<string> temp = () => {return "test";};
이 작업은 약간의 캐스팅을 통해 한 줄로 수행하거나 대리자 생성자를 사용하여 람다 형식을 설정 한 다음 호출을 수행 할 수 있습니다.
string temp = ((Func<string>)(() => { return "test"; }))();
string temp = new Func<string>(() => { return "test"; })();
참고 : 두 샘플 모두 부족한 표현 형식으로 단락 될 수 있습니다. { return ... }
Func<string> temp = () => "test";
string temp = ((Func<string>)(() => "test"))();
string temp = new Func<string>(() => "test")();
문자열 유형에 함수 대리자 를 지정하려고 합니다. 이 시도:
Func<string> temp = () => {return "test";};
이제 다음과 같이 함수를 실행할 수 있습니다.
string s = temp();
"s"변수는 이제 "test"값을 갖습니다.
약간의 도우미 함수와 제네릭을 사용하면 컴파일러가 유형을 추론하고 약간 단축 할 수 있습니다.
public static TOut FuncInvoke<TOut>(Func<TOut> func)
{
return func();
}
var temp = FuncInvoke(()=>"test");
참고 : 이것은 익명 유형을 반환 할 수 있기 때문에 좋습니다.
var temp = FuncInvoke(()=>new {foo=1,bar=2});
인수와 함께 익명 메서드를 사용할 수 있습니다.
int arg = 5;
string temp = ((Func<int, string>)((a) => { return a == 5 ? "correct" : "not correct"; }))(arg);
익명 메서드는 func 대리자를 사용하여 값을 반환 할 수 있습니다. 다음은 익명 메서드를 사용하여 값을 반환하는 방법을 보여주는 예입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Func<int, int> del = delegate (int x)
{
return x * x;
};
int p= del(4);
Console.WriteLine(p);
Console.ReadLine();
}
}
}
참고 URL : https://stackoverflow.com/questions/10520892/how-to-return-value-with-anonymous-method
반응형
'program story' 카테고리의 다른 글
부트 스트랩 navbar 활성 상태가 작동하지 않음 (0) | 2020.10.13 |
---|---|
값이 숫자인지 어떻게 확인할 수 있습니까? (0) | 2020.10.13 |
마지막 마이그레이션 추가 명령을 실행 취소하려면 어떻게합니까? (0) | 2020.10.12 |
'마스킹 된'비트 세트 증가 (0) | 2020.10.12 |
.NET JSON 직렬화 중 필드 무시 (0) | 2020.10.12 |