FirstOrDefault是否返回对集合中项目的引用或项目的值?
var obj = myCollection.FirstOrDefault(x => x.Param == "match condition");
if (obj != null)
{
obj = newObjectOfCollectionType; //if found, replace with the changed record
}
此代码是否会将myCollection中的对象引用替换为新对象,还是对myCollection不执行任何操作?
答案 0 :(得分:4)
它对集合没有任何作用。您可以像这样更改集合:
int index = myCollection.FindIndex(x => x.Param == "match condition");
if (index != -1)
{
myCollection[index] = newObjectOfCollectionType;
}
答案 1 :(得分:4)
var obj = myCollection.FirstOrDefault(x => x.Param == "match condition");
if (obj != null)
{
obj = newObjectOfCollectionType; --> this will not reflect in the collection
}
var obj = myCollection.FirstOrDefault(x => x.Param == "match condition");
if (obj != null)
{
obj.Property = newValue; --> this will reflect in your object in the original collection
}
答案 2 :(得分:3)
编辑:
要替换对象,它取决于您的收藏品的类型
如果它是IEnumerable<T>
,那么它不可变,你将无法改变它
您拥有的最佳选择是创建一个新集合并对其进行修改,如此 -
T [] array = myCollection.ToArray();
array[index] = newObject;
答案 3 :(得分:2)
它返回集合中的值。但在你的情况下,这个值是一个参考。
它没有返回位置。您的代码不会更改集合。
答案 4 :(得分:1)
如果序列是引用类型序列,则返回引用。否则,返回值。
但是,无论如何,这一行:
obj = newObjectOfCollectionType
对序列内容不做任何处理,无论序列的项目类型如何。