возвращать ожидаемое значение при вызове по имени переменной - PullRequest
0 голосов
/ 16 мая 2019

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

struct A
{
   int Value;
}

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

Я ожидаю, что результат будет 9

Ответы [ 4 ]

2 голосов
/ 16 мая 2019

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

    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);
2 голосов
/ 16 мая 2019

Чтобы использовать в точности то, что вы написали 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

1 голос
/ 16 мая 2019

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

public static implicit operator int(A a)
{
    return a.Value;
}
1 голос
/ 16 мая 2019

Ваша структура пропускает методы доступа для Значение

    struct A
    {
        public int Value { get; set; }
    }
    Main()
    {
        A number = new A();
        number.Value = 9;
        Console.WriteLine(number.Value)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...