Обнаружена ошибка при использовании лямбды для изменения значений переменных - PullRequest
0 голосов
/ 25 октября 2019

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

Error CS0200 Property or indexer 'Class3.Storage.b' cannot be assigned to -- it is read only.

I 'Я пытался использовать подход get и set public static int b { get; set; } => a + 5;, но я считаю, что метод его применения неправильный. Есть ли способ использовать лямбду для записи значений или, возможно, объединить ее с установщиком?

То, что я хотел бы видеть, это значение b, которое постоянно обновляется (поэтому я использовал лямбда-подход) игибкость редактирования значения b с помощью чего-то вроде Storage.b++;

Спасибо!

Код, как показано ниже.

class Class3
{
public class Storage
    {
        public static int a = 100;
        public static int b => a + 5;
        public static int c;
    }
public static void Main()
    {
        Methods Test = new Methods();
        Console.WriteLine("Original a value: {0}", Storage.a);
        Console.WriteLine("b value: {0}", Storage.b);
        Console.WriteLine("c value: {0}", Storage.c);
        Test.Met1();
        Console.WriteLine("After met1: {0}", Storage.a);
        Console.WriteLine("b value: {0}", Storage.b);
        Console.WriteLine("c value: {0}", Storage.c);
        Test.Met2();
        Console.WriteLine("After met2: {0}", Storage.a);
        Console.WriteLine("b value: {0}", Storage.b);
        Console.WriteLine("c value: {0}", Storage.c);
        Test.Met3();
        Console.WriteLine("After met3: {0}", Storage.a);
        Console.WriteLine("b value: {0}", Storage.b);
        Console.WriteLine("c value: {0}", Storage.c);

        Storage.b += 1;
        Console.WriteLine("b value: {0}", Storage.b);
    }
    public class Methods
    {
        public void Met1()
        {
            Storage.a -= 10;
            Storage.c = Storage.a;
        }
        public void Met2()
        {
            Storage.a -= 10;
            Storage.c = Storage.a;
        }
        public void Met3()
        {
            Console.WriteLine("{0}", Storage.a);
            Storage.c = Storage.a;
            Met1();
            Met2();
            if (Storage.a > 10)
            {
                Met3();
            }
        }
    }
}

1 Ответ

0 голосов
/ 25 октября 2019

только для чтения означает, что вы можете только читать: D, попробуйте это:

private static int _f = a + 5;
    public static int f
    {
        get { return _f; }
        set { _f = a + 5; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...