>백엔드 개발 >C++ >C#에서 'var' 변수에 익명 메서드를 할당할 수 없는 이유는 무엇입니까?

C#에서 'var' 변수에 익명 메서드를 할당할 수 없는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-29 03:53:10775검색

Why Can't I Assign an Anonymous Method to a `var` Variable in C#?

익명 메서드가 Var에 할당할 수 없는 이유

다음과 같은 익명 메서드를 만날 때:

delegate(string value) {
    return value != "0";
}

컴파일러는 다음과 같습니다. 도전에 직면했습니다.

Func comparer = delegate(string value) {
    return value != "0";
};

과 같은 형식화된 람다 식과 달리 무명 메서드는 대리자 형식을 명시적으로 지정하지 않습니다. 컴파일러는 메서드의 시그니처를 기반으로 해당 유형을 추론해야 합니다. 그러나 다양한 매개 변수와 반환 값을 사용하여 이러한 조건을 충족하는 무한한 잠재적 대리자 유형이 있습니다.

무명 메서드에 대한 유형을 추론하면 다음과 같은 몇 가지 문제가 발생합니다.

  • 부족 일관성: var에 람다 식을 할당하면 Func 유형. 그러나 익명 메소드의 경우 이러한 우선순위가 없으므로 다중 인수 사례를 처리할 때 불일치가 발생합니다.
  • 모호함: var x2 = y => 123, 컴파일러는 매개변수 유형을 결정할 수 없습니다.
  • 정의되지 않은 반환 유형: 일부 익명 메서드에는 참조 또는 null 허용 값 유형일 수 있는 지정되지 않은 반환 유형이 있습니다.
  • 결정할 수 없는 함수 범위: var x5 = (int y)와 같은 경우 명령문 람다와 함수를 구분할 수 없습니다. => q = y.
  • 특수 구문 및 제한: 익명 메서드를 사용하려면 대리자 키워드가 필요하므로 람다 식에 비해 불필요한 구문이 추가됩니다. 대리자 형식에는 표현식 트리 및 메시지 전달과 같은 기능도 부족합니다.

따라서 "암시적으로 유형이 지정된 지역 변수에 익명 메서드를 할당할 수 없습니다."라는 컴파일러 오류로 인해 익명 메서드와 함께 var를 사용할 수 없습니다.

위 내용은 C#에서 'var' 변수에 익명 메서드를 할당할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.