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()에 접근할 수 있다는 점입니다.

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

where TSelf : IParsable<TSelf>에 의해 TSelf가 IParsable<TSelf>를 구현해야 함을 알 수 있습니다.
int (Int32) 구조체를 보시죠. int는 ISignedNumber<int>를 구현하고,
ISignedNumber<int>는 IParsable<TSelf> 인터페이스를 포함하고 있습니다.

