【发布时间】:2018-04-07 22:30:02
【问题描述】:
我一直在尝试使用临时变量和某种循环将多个项目添加到列表中。我将在循环外创建临时变量和列表,然后在循环内临时变量将更改值,然后在循环重复之前作为新元素添加到列表中。问题是,每当临时变量发生变化时,列表中的所有元素都会变为相同。
例如,如果我正在制作水果列表,并输入 te list 'banana'、'apple' 和 'pear',则写入控制台时的列表将显示为 'pear'、'pear' 和 ' pear',这也是列表在调试模式下的显示方式。
我输入的具体代码如下:
string inputText = "";
List<TextNumbers> inputTextChars = new List<TextNumbers>();
TextNumbers temp = new TextNumbers();
bool charFound = false;
inputText = Console.ReadLine();
foreach (char letter in inputText)
{
for (int i = 0; i < inputTextChars.Count; i++)
{
if (letter == inputTextChars.ElementAt(i).character)
{
charFound = true;
}
}
if (charFound == false)
{
temp.character = letter;
temp.number = 0;
}
temp.number++;
inputTextChars.Add(temp);
charFound = false;
}
inputTextChars.Sort();
foreach (TextNumbers text in inputTextChars)
{
Console.WriteLine(text.character + ": " + text.number);
}
“TextNumbers”类是:
public class TextNumbers
{
public char character;
public int number;
}
【问题讨论】:
-
这是一个常见错误。在循环内移动 temp 变量的声明和初始化。您当前的代码在每个循环中更改相同的对象实例,最后您只看到最后一次更改
-
是的 - 每次都是相同的温度 - 每次都制作一个新的
-
@Steve 谢谢,您的建议有效,我不知道这是一个如此简单的解决方案。
-
是的,但是您确实应该尝试了解引用的工作原理,否则此类错误将非常频繁。
-
尝试:temp = new TextNumbers();然后 inputTextChars.Add(temp);