我一直在尝试使用临时变量和某种循环将多个项添加到列表中。我将在循环外部创建临时变量和列表,然后在循环内部临时变量将更改值,然后在循环重复之前将其作为新元素添加到列表中。问题是,每当更改临时变量时,列表中的所有元素都将变为相同。
例如,如果我正在制作水果列表,并输入了te list' banana' apple' 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);
}
课程&#39; TextNumbers&#39;是:
public class TextNumbers
{
public char character;
public int number;
}
答案 0 :(得分:4)
您可以从the accepted answer on this question看到:
是的,参考类型列表实际上只是一个参考列表
这意味着您每次都会在列表中添加对temp
的引用。
要避免这种情况,请将temp变量的声明移到循环中,以便每次都添加对全新对象的引用,如下所示:
foreach (char letter in inputText)
{
TextNumbers temp = new TextNumbers();
//..... rest of code