возвращать ожидаемое значение при вызове по имени переменной

Я хочу сделать структуру, которая, когда его значение установлено, вы можете вызвать значение по имени переменной.

struct A
{
   int Value;
}

Main()
{
   // Sets Value to 9
   A Number = 9;
   Console.Write(Number);
   // output should be 9
}

Я ожидаю, что на выходе будет 9

Всего 4 ответа


Вы можете оптимизировать свой код следующим образом:

    struct A
    {
        public int Value;

        public A(int val)
        {
            Value = val;
        }

        public override string ToString()
        {
            return Value.ToString();
        }
    }

и использовать, как вы хотели:

        // Sets Value to 9
        A Number = new A(9);
        Console.Write(Number);

Чтобы использовать именно то, что вы написали, A number = 9; Console.Write(Number); A number = 9; Console.Write(Number); сначала вам нужно определить оператор неявного присваивания, а затем вам нужно переопределить метод ToString() чтобы получить правильный вывод. Образец кода:

struct A
{
    public int Value;

    public A(int value)
    {
        Value = value;
    }

    // This allows creating an instance of struct A by writing it as an assignment statement
    static public implicit operator A(int value)
    {
        return new A(value);
    }

    public override string ToString()
    {
        return Value.ToString();
    }
}

public static void Main()
{
    A Number = 9;
    Console.Write(Number);
}

Демонстрационная версия здесь: https://dotnetfiddle.net/WZPsLX


Ваша структура пропускает средства доступа для Value

    struct A
    {
        public int Value { get; set; }
    }
    Main()
    {
        A number = new A();
        number.Value = 9;
        Console.WriteLine(number.Value)
    }

Добавляя к ответу Питера Б., вы также можете определить противоположное неявное преобразование вместо ToString()

public static implicit operator int(A a)
{
    return a.Value;
}

Есть идеи?

10000