ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – for循环中的逻辑错误在哪里

2019-06-11 03:52:42  阅读:144  来源: 互联网

标签:c for-loop concatenation


public class Client
{
    public string nome;
}

Client j, h, m, n;
j = h = m = n = new Client();

Client[] c= new Client[]{j,h,m,n};
int[] n = new int[c.Length];

for (int i = 0; i < c.Length; ++i)
{
    n[i] =i;
    c[i].nome = "Client"+i;

}

在n = 0,1,2,3的输出中;

但在c = Client4,Client4,Client4,Client4的输出中

我不是编程的新生,但我无法弄清楚为什么它不会连接每一个值.
我无法向自己解释.有c [i],它应该工作.

有人能帮忙吗?

解决方法:

代码:

j = h = m = n = new Client();

创建对单个新对象的j,h,m和n引用.

因此,行c [i] .nome =“Client”i;将设置该单个对象的nome字段,覆盖之前循环迭代已经完成的所有更改.换句话说,你拥有的是:

 j ---+
      |    +-------------+
 h ---+--> | single item |
      |    +-------------+
 m ---+
      |
 n ---+

如果你想要不同的对象,你需要使用类似的东西:

j = new Client();
h = new Client();
m = new Client();
n = new Client();

这样,当您更改其中一个对象时,它不会影响其他对象:

      +------+         +------+
j --> | item |   h --> | item |
      +------+         +------+
      +------+         +------+
m --> | item |   n --> | item |
      +------+         +------+

而且,顺便说一句,如果你正在寻找一种源代码大小有效的方法(从你的评论中可以看出这种情况),你可以尝试摆脱中间人.

不需要那些j / h / m / n临时引用,也不需要使用单字符变量名的真正借口.好吧,除了我,当然:-)

这将是::

Client[] clientArray = new Client[] {
    new Client(), new Client(), new Client(), new Client()
};
int[] numArray = new int[clientArray.Length];
for (int i = 0; i < clientArray.Length; ++i) {
    numArray[i] = i;
    clientArray[i].nome = "Client" + i;
}

标签:c,for-loop,concatenation
来源: https://codeday.me/bug/20190611/1215956.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有