새 레코드 기능에 대한 두 가지 질문 :
반사를 사용하여 레코드를 어떻게 인식합니까? [여기] [1]을 (를) 감지하는 방법이있을 수 EqualityContract
있지만 그 방법이 맞는지 확실하지 않습니다.
제네릭 유형이 레코드라는 제네릭 제약 조건을 가질 수 있습니까? 즉, 유형 매개 변수 T가 제약 조건을 사용하는 레코드 클래스 여야한다는 것을 나타낼 수 있다면?
반사를 사용하여 레코드를 어떻게 인식합니까?
이 작업을 수행하는 공식적인 방법이있을뿐만 아니라 기능의 디자인에 명시 적으로 위배됩니다. 레코드의 의도는 C # 10을 사용하면 클래스를 레코드로 만드는 것이 순전히 편리한 선택이며 기능의 다른 모든 부분이 어떤 형태의 구문을 통해 달성 될 수있는 지점에 도달하는 것입니다. 레코드에서 클래스로 유형을 변경하는 것이 획기적인 변경이어서는 안되며, IDE 리팩토링이 클라이언트가 알지 못하는 사이에 레코드 구문간에 유형을 자동으로 이동할 수 있다고 상상할 수도 있습니다. C # 9의 경우이를 달성하지 못한 곳이 있지만 그것이 목표입니다.
에도 불구하고 위의 한 유형이 자동으로 생성이 있는지 확인하는 명확한 방법이 아니므로 Equals
하고 GetHashCode
위의 내 목표는 유형의 기록입니다 여부를 결정하지 않고 달성 할 수없는이. 여기에 대한 공개 요청이 있습니다.
업무용 ATM 기록을 탐지하는 몇 가지 hackish 방법은 다음과 같습니다.
EqualityContract
부동산의 CompilerGenerated
속성isRecord = ((TypeInfo)t).DeclaredProperties.Where(x => x.Name == "EqualityContract").FirstOrDefault()?.GetMethod?.GetCustomAttribute(typeof(CompilerGeneratedAttribute)) is object;
<Clone>$
@Yair Halberstadt가 지적한 회원 확인isRecord = t.GetMethod("<Clone>$") is object;
또는 둘의 조합
제네릭 유형이 레코드라는 제네릭 제약 조건을 가질 수 있습니까?
아니
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다