C# 11 및 .NET 7은 제네릭 구문 분석을 제공 합니다.

C# 11 이전에는 문자열을 구분 분석하는 정적 Parse()를 제네릭 제약조건으로 접근할 수 없었습니다.
이제 C# 11에서 가능합니다.

var a = Parse<int>("4");
Console.WriteLine(a);

static T Parse<T>(string s, IFormatProvider? provider = default)
    where T : IParsable<T>
{
    return T.Parse(s, provider);
}

| 출력

4

위의 짧은 코드에서 흥미로운 점은 제네릭 제약조건에서 T가 IParsable<T>일 경우 T가 제네릭 인자임에도 불구하고 정적 메소드인 Parse()에 접근할 수 있다는 점입니다.

image

그렇다면 IParsable<T>가 어떻게 정의되어 있는지 같이 보시죠.

where TSelf : IParsable<TSelf>에 의해 TSelfIParsable<TSelf>를 구현해야 함을 알 수 있습니다.

int (Int32) 구조체를 보시죠. int는 ISignedNumber<int>를 구현하고,

image

ISignedNumber<int>IParsable<TSelf> 인터페이스를 포함하고 있습니다.


좋아요 3

이것은 결국에 .NET 7에서 Generic Math를 지원하기 위한 기반입니다.


좋아요 2

새로운 .NET 7.0 IParsable<TSelf> 인터페이스 | NDepend

좋아요 1