より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

こんな文法あるんだ「Id = id ?? throw new ArgumentException(nameof(id));」

namespace ValueObject
{
    public class User
    {
        public UserId Id { get; set; }
        public UserName Name { get; set; }

        public User(UserId id, UserName name)
        {
            if (id == null) throw new ArgumentException(nameof(id));
            if (name == null) throw new ArgumentException(nameof(name));
            Id = id;
            Name = name;
        }
    }
}

というC#のコードを書いていたのですが、Riderがサジェストしてきたのです。

適用してみると

using System;

namespace ValueObject
{
    public class User
    {
        public UserId Id { get; set; }
        public UserName Name { get; set; }

        public User(UserId id, UserName name)
        {
            Id = id ?? throw new ArgumentException(nameof(id));
            Name = name ?? throw new ArgumentException(nameof(name));
        }
    }
}

確かに ?? でnullだったら〜の値を指定できるのですが、値ではなく例外もできるんかと。