var top100 = (from m in _messages
              where m.IsSent == false
              select m).Take(100);

foreach (var message in top100)
{
    message.IsSent = _sms.SendSMS(message.Source, message.Destination, message.TextMessage);
}

var count = _messages.Count(x => x.IsSent);


我不明白为什么变量count等于0。我本以为我正在使用对消息对象的引用,但是如果count为0,是否表示我正在使用副本?我究竟做错了什么?

最佳答案

我只是尝试调查您的问题,但没有重现它,因此让我怀疑您的IsSent是否实际上是错误的,这就是为什么您得到结果。

void Main()
{
    var top100 = (from m in Messages where m.IsSent == false select m).Take(100);
    foreach (var message in top100) {
        message.IsSent = true;
    }
    var count = Messages.Count(x => x.IsSent);
    Console.WriteLine(count);
}
List<Message> Messages {
    get {
        if(_messagesList == null) {
            _messagesList = new List<Message>();
            for (int i = 0; i < 100; i++)
                _messagesList.Add(new Message { IsSent = false });
        }
        return _messagesList;
    }
}
List<Message> _messagesList;
class Message {
    public bool IsSent { get; set; }
}


输出为100

关于c# - Linq返回对象的副本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12682669/

10-10 15:33