gpt4 book ai didi

c# - 快速提问 : C# Linq "Single" statement vs "for" loop

转载 作者:太空宇宙 更新时间:2023-11-03 11:44:07 24 4
gpt4 key购买 nike

我需要一些说明。这两种方法相同还是不同?我对何时更新按值传递给参数的对象的引用以及何时创建新对象感到有点困惑。我知道该赋值是否会创建一个新的引用,但是更改属性怎么办?这两种方法是否会以相同的方式更新字段“_someObjectList”?

 public class SomeObject{
public Guid UniqueKey { get; set; }
public object SomeProperty{ get; set; }
}

public class SomeObjectListWrapper{

public SomeObjectListWrapper(List<SomeObject> someObjectList){
_someObjectList = someObjectList;
}

private readonly List<SomeObject> _someObjectList;

public void ReplaceItemPropertyValue1(Guid itemUniqueKey, object propertyValue)
{

List<int> resultIndices = new List<int>();
for (var i = 0; i < _someObjectList.Count(); i++)
{
if (_someObjectList[i].UniqueKey == itemUniqueKey)
resultIndices.Add(i);
}

if (resultIndices.Count != 1)
throw new Exception(
"just pretend this is the same exception as Single() throws when it can't find anything");
_someObjectList[resultIndices[0]].SomeProperty = propertyValue;
}

public void ReplaceItemPropertyValue2(Guid itemUniqueKey, object propertyValue)
{
_someObjectList.Single(x=>x.UniqueKey==itemUniqueKey).SomeProperty=propertyValue;
}
}

最佳答案

因为 SomeObject 是一个类(即引用类型),所以 ReplaceItemPropertyValue 方法都在更新插入到列表中的同一对象,并将从稍后列出。 (如果 SomeObject 是结构/值类型,编译器会阻止您更新右值/返回值 [1]。)

作为次要旁注,您的两种方法实际上并不相同。如果序列中有多个匹配项目,Single 方法会引发异常。要正确匹配行为,请改用 First


  1. “右值”实际上并不是“返回值”的缩写,它只是碰巧在这种情况下您的右值是一个返回值,这就是我指定这两个选项的原因。

关于c# - 快速提问 : C# Linq "Single" statement vs "for" loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3848719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com