C# Linq返回对象的副本
我无法理解为什么变量计数等于0。我本以为我在使用对消息对象的引用,但如果计数为0,这是否意味着我在使用副本?我做错了什么?在短信处理后,只需从C# Linq返回对象的副本,c#,linq,C#,Linq,我无法理解为什么变量计数等于0。我本以为我在使用对消息对象的引用,但如果计数为0,这是否意味着我在使用副本?我做错了什么?在短信处理后,只需从top100中获取计数即可 var count=top100.count(m=>m.IsSent) 让我们假设一个计数与您当前的代码一起返回。对于您刚才尝试的100条消息,它将返回一个不正确的计数。比如说,\u messages中有101条消息。其中100人的IsSent设置为false,1人的IsSent设置为true。将第一行中得到的100设置为tru
top100中获取计数即可
var count=top100.count(m=>m.IsSent)代码>
让我们假设一个计数与您当前的代码一起返回。对于您刚才尝试的100条消息,它将返回一个不正确的计数。比如说,\u messages
中有101条消息。其中100人的IsSent
设置为false,1人的IsSent
设置为true。将第一行中得到的100设置为true后,\u messages.Count(x=>x.IsSent)
将返回101。根据您使用的是什么,101可能没有意义。您正在处理的是可枚举的。Take会产生一个结果,因此除非在末尾添加.ToList()
,否则您的.Count()
调用实际上只会重新应用来自m in的
其中m.IsSent==false
返回下100条未发送的消息
将.ToList()
添加到初始拉入100,然后.Count()
将根据您处理的初始100进行计算。我刚刚尝试调查您的问题,但没有复制它,因此我想知道您的Isent是否真的是假的,这就是您得到结果的原因
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);
void Main()
{
var top100=(来自消息中的m,其中m.IsSent==false选择m);
foreach(top100中的var消息){
message.IsSent=true;
}
var count=Messages.count(x=>x.IsSent);
控制台写入线(计数);
}
列出消息{
得到{
如果(_messagesList==null){
_messagesList=新列表();
对于(int i=0;i<100;i++)
_添加(新消息{IsSent=false});
}
返回消息列表;
}
}
列表-消息列表;
类消息{
公共布尔值为{get;set;}
}
输出为100
是否SendSMS返回false?我假设top100
的计数不是零?消息类型是class
还是struct
?能否简化您的代码,以便将其完整发布在此处,我们可以重现问题?确定问题,我们需要一个可复制的代码样本。OP是根据\u消息计算的,而不是top100
,所以这不是问题所在。
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; }
}