Как установить элемент кортежа, полученного linq - PullRequest
0 голосов
/ 16 июня 2020

У меня есть список кортежей. Мне нужно получить один из этих кортежей с помощью linq и изменить его item2. Я пытался сделать это просто вот так:

            Tuples.First(s => s.Item1 == i).Item += value;

, но он не компилировался. Я также пытался сделать это так:

        (int, int) tuple = Tuples.First(s => s.Item1 == i);
        tuple.Item2 += value;

, но кортеж не работает как ссылочная переменная

Итак, как это сделать?

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Кортежи неизменяемы ; вы не можете изменить существующий кортеж, но вы можете создать новый один:

    (int, int) tuple = Tuples.First(s => s.Item1 == i);

    tuple = (tuple.Item1, tuple.Item2 + value); 

Или

    (int, int) tuple = Tuples
      .Select(s => (s.Item1, s.Item2 + value)) 
      .First(s => s.Item1 == i);
0 голосов
/ 16 июня 2020

Если Tuples является массивом, вы можете изменить значение таким образом (как и с любой другой изменяемой структурой):

var Tuples = new[] {(0, 0)};
ref var t = ref Tuples[0]; // find needed index somehow
t.Item1 += 1;
Console.WriteLine(Tuples[0].Item1); // prints 1
0 голосов
/ 16 июня 2020

Согласно docs , tuple.Item1 имеет только геттер, что означает, что это свойство доступно только для чтения.

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

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