Что вы можете сделать, это сначала найти Index
для обновления, используйте это Index
для вывода кортежа, а затем снова используйте Index
для предоставления списку с обновленным кортежем.
Что-то вроде:
static void Main(string[] args)
{
var questions = new List<(ulong channel, ulong user, object answer)>
{
(1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 4, 4)
};
foreach (var (channel, user, answer) in questions)
{
Console.WriteLine(answer);
}
var channel3Index = questions.FindIndex((obj) => obj.channel == 3);
if (channel3Index > -1)
{
var question = questions[channel3Index];
question.answer = 666;
questions[channel3Index] = question;
}
foreach (var (channel, user, answer) in questions)
{
Console.WriteLine(answer);
}
Console.ReadKey();
}
Причина, по которой вы должны сначала обновить его, а затем заменить его существующим, заключается в том, что вы используете ValueTuples, которые являются типами значений.См .: https://docs.microsoft.com/en-us/dotnet/api/system.valuetuple?redirectedfrom=MSDN&view=netframework-4.8
Редактировать : Если вы не хотите использовать тип значения в своем списке, используйте ссылочный тип.Простой класс подойдет.
class Program
{
public class Question
{
public ulong Channel { get; set; }
public ulong User { get; set; }
public Object Answer { get; set; }
}
static void Main(string[] args)
{
var questions = new List<Question>
{
new Question
{
Channel = 1,
User = 1,
Answer = 1
},
new Question
{
Channel = 2,
User = 2,
Answer = 2
},
new Question
{
Channel = 3,
User = 3,
Answer = 3
},
};
foreach (var question in questions)
{
Console.WriteLine(question.Answer);
}
var channel3Index = questions.FindIndex((obj) => obj.Channel == 3);
if (channel3Index > -1)
{
questions[channel3Index].Answer = 666;
}
foreach (var question in questions)
{
Console.WriteLine(question.Answer);
}
Console.ReadKey();
}
}