C#:查找和更改结构数组中的元素

标签 c# arrays struct pass-by-reference

我有一个结构 TableRow 和一个这样的结构的数组 table:

table = new TableRow[10];

现在我想查找和操作数组中结构之一的内容。
我使用 Array.Find 搜索正确的数组元素:

var tr = Array.Find( table, tRow => tRow.color == 'red' );
tr.count++;

问题在于结构是值类型,因此 Find 方法返回我要操作的结构的副本。更改此副本不会更改数组中的结构。

我似乎找不到任何方法来指示 Find 方法通过引用返回结构。

最佳答案

您无法更改 Find() 对值类型的工作方式。您可以将 struct 转换为 class —— 通常我们只将 struct 用于非常小的(<= 16 字节)值类型,这些值类型表示无论如何,一个“单一”的值(value)。 MSDN 在此处对 structclass 提供了很好的指导:Chossing Between Classes and Structs

或者您可以使用 FindIndex() 获取数组中的位置,然后使用它来修改字段。

var pos = Array.FindIndex(table, tRow => tRow.color == 'red');

if (pos >= 0)
{
    table[pos].count++
}

关于C#:查找和更改结构数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9234963/

相关文章:

c# - Web Api 服务器端处理和数据表参数

C# - 类型约束和限制,是否有任何解决方法来保持类型安全?

java - 如何使方法将任何类型的数组作为参数?

c - 错误: ‘node’ undeclared (first use in this function)

c - 初始化一个结构数组,其中包含函数指针 C

c - 如何使用回调修改 GtkWidget 数组的元素

c# - Prism 7 - 将 ConfigurationModuleCatalog 与 DirectoryModuleCatalog 合并

c# - 使用 AutoMapper 进行映射后,如何不丢失目标对象中存在但源对象中不存在的属性

java - 使用正则表达式删除逗号和空格并将它们划分为不同的变量

python - 给定一个二维 numpy 实数数组,如何生成描述每个数字强度的图像?