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를 씁니다.

4개의 좋아요

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

3개의 좋아요