Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq返回对象的副本_C#_Linq - Fatal编程技术网

C# Linq返回对象的副本

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

我无法理解为什么变量计数等于0。我本以为我在使用对消息对象的引用,但如果计数为0,这是否意味着我在使用副本?我做错了什么?

在短信处理后,只需从
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; }
}