С#: Как это работает: Unit myUnit = 5;

Я только заметил, что вы можете сделать это на С#:

Unit myUnit = 5;

вместо этого:

Unit myUnit = new Unit(5);

Кто-нибудь знает, как я могу добиться этого с помощью своих собственных структур? Я взглянул на структуру Unit с отражателем и заметил, что используется атрибут TypeConverter, но после создания пользовательского TypeConverter для моей структуры я все еще не мог заставить компилятор разрешить этот удобный синтаксис.

Ответы

Ответ 1

Вам нужно предоставить неявный оператор преобразования из int в Unit, например:

    public struct Unit
    {   // the conversion operator...
        public static implicit operator Unit(int value)
        {
            return new Unit(value);
        }
        // the boring stuff...
        private readonly int value;
        public int Value { get { return value; } }
        public Unit(int value) { this.value = value; }
    }

Ответ 2

Вам необходимо предоставить оператор-подборщик для класса, который принимает Int32.