gpt4 book ai didi

c# - 如何使用linq获取内存位置?

转载 作者:行者123 更新时间:2023-12-01 20:06:09 25 4
gpt4 key购买 nike

我有一个列表,我试图找到一个特定的元素,然后我想编辑该元素。

storage.First(item => item.dirty == true).dirty = false; 

但是这似乎不起作用,因为我猜测 First 正在创建另一个列表并填充它。有没有一个函数可以做我想做的事情?

这是我正在使用的数据类型:

class BaseRegister {
public bool dirty {set;get;}
}

List <BaseRegister> storage = new List <BaseRegister> ();

最佳答案

这将起作用,但前提是您的类型(包含 .dirty )是一个类。

如果这是一个结构,您将无法以这种方式改变该结构。对于结构,您需要替换集合中的整个结构,这对于使用 LINQ 扩展来说非常困难,因为它们是为查询而不是编辑而设计的。

如果( storage 的类型)实现 IList<T> ,如List<YourClass> ,你可以使用:

int index = storage.FindIndex(item => item.dirty);
var item = storage[index];
item.dirty = false;
storage[index] = item;

请注意,它很困惑,但主要是因为它必须完全重置列表中结构的值。

顺便说一句,这就是可变结构不是一个好主意的部分原因。如果您发现这是您认为您的类型需要的模式,您可能需要考虑一个类。一般来说,任何带有“脏”标志的项目都可能是可变的,因此,应该是一个类而不是一个结构。

关于c# - 如何使用linq获取内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8044214/

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