当前位置: 首页 > 编程语言 > C#

在C#中更新foreach循环中的struct分享

时间:2023-04-10 13:14:57 C#

C#学习教程:在C#中的foreach循环中更新结构namespaceConsoleApplication1{publicstructThing{公共字符串名称;}classProgram{staticvoidMain(string[]args){Listthings=newList();foreach(Thingtinthings)//对于每个文件{t.Name="xxx";}}}}它不会编译。错误是:无法修改't'的成员,因为它是一个'foreach迭代变量'但是,如果我将Thing更改为类而不是结构,它会编译。请有人解释这是怎么回事?或多或少地说,编译器不会让您更改foreach内的(部分)循环变量。只需使用:for(inti=0;i它在Thing是一个类时起作用,因为你的循环变量是一个引用,你只是在对引用的对象进行更改,而不是对引用本身进行更改。结构不是引用类型,而是一个值类型。如果你有一个类而不是Thing的结构,foreach循环将为你创建一个引用变量,它将指向列表中的正确元素。但由于它是一个值类型,它只能对你的事物的副本进行操作,在本例中为迭代变量。结构是值类型,但类是引用类型。这就是为什么它在类时编译而不是结构时编译的原因查看更多:http://www.albahari.com/valuevsreftypes.aspx我更喜欢@Henk解决方案的替代语法是这样的。DateTime[]dates=newDateTime[10];foreach(intindexinEnumerable.Range(0,dates.Length)){refDateTimedate=refdates[index];//用日期做事。//...}如果您在循环中做很多工作,那么不必在所有地方重复索引会更容易。PSDateTime实际上是一个非常糟糕的示例,因为它没有您可以设置的任何属性,但您明白了。以上就是C#学习教程:更新C#中foreach循环中struct共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注---本文来自网络收集,不代表立场,如涉及侵权,敬请谅解点击右侧联系管理员删除。如需转载请注明出处: