C# 10 기능 `record struct` 및 `static abstract`로 예제 코드 구현

아래 코드는 recrod structstatic abstract를 이용해 간단히 구현한 코드입니다.
아래의 코드가 유용해 보이나요? 여러분 의견 댓글로 부탁 바랍니다~

var email1 = EMail.Parse("user1@email.com");
var email2 = EMail.Parse("user1@email.com");
var email3 = EMail.Parse("user2@email.com");
Console.WriteLine($"{email1 == email2}");
Console.WriteLine($"{email1 == email3}");

interface IParse<TSelf, TValue>
{
    static abstract TSelf Parse(TValue value);
}

interface IValidate<TValue>
{
    static abstract void Validate(TValue value);
}


record struct EMail(string Value) : IParse<EMail, string>, IValidate<string>
{
    public static EMail Parse(string value)
    {
        EMail.Validate(value);

        return new EMail(value);
    }
    // 미구현함
    public static void Validate(string value)
    {
        //
    }
}
좋아요 5

이건 딴 얘기인데, :thinking: 이메일처럼 명백한 영숫자와 기호로 구성된 문자열 비교는 저 같은 경우는 의도적으로 == 연산자를 쓰는걸 최대한 피하고, String.Equals(a, b, StringComparison.Ordinal)을 쓰려고 노력하는 편인데, 다른 분들은 어떻게 쓰시는지 궁금하군요.

좋아요 5

뭔가 여론이 딱 50:50으로 나뉠 것 같은 구성이네요…

좋아요 4

@rkttu 어차피 == 연산자에 오버로딩 되어있어서 Equals를 호출하긴 하지만 string이 아닌 object 등의 다른 형식으로 되어있을 경우에는 Equals를 호출하지 않는 걸로 알고 있습니다. 그래서 저도 Equals를 씁니다.

좋아요 3

요즘 리팩토링 기능에는 아예 string에 ==을 붙일 경우 경고 처리 했던 것으로 기억합니다 (CS0253).
이 경우엔 Equals를 쓰는것보다 object 등을 string으로 캐스트하는 것을 권하더군요.

좋아요 2