我对C#还是很陌生,我只能参加一次大学练习。我必须对一些元素进行排序,并通过重写方法ToString将它们显示出来。那里是覆盖问题。 List与ToString一起使用,而List与List无关。
直到现在,我都尝试创建一些简单的foreach并将其放入重写的方法中,但仍然没有成功。它只能通过方法运行。问我的教授,他告诉我,这是因为我要访问List,而不是Lista1之类的东西。就像我说的,我是新手。
using System;
using System.Collections.Generic;
namespace lista_7
{
class Lista
{
public static Random rand = new Random();
public List<int> nums = new List<int> ();
public Lista(int n)
{
for (int i = 0; i <= n; i++)
{
nums.Add(rand.Next(100));
}
}
public Lista()
{
Random rand = new Random();
for (int i = 0; i <= rand.Next(5); i++)
{
nums.Add(rand.Next(100));
}
}
public override string ToString()
{
String result = "";
foreach (var numbers in nums)
{
result += numbers + " ";
}
return result;
}
}
class Lista1 : Lista, IComparable<Lista1>
{
public Lista1(int n) : base(n) { }
public Lista1() : base() { }
public int CompareTo(Lista1 x)
{
if (x == this) return 0;
else if (x == null) return 1;
for (int i = 0; i < this.nums.Count && i < x.nums.Count; i++)
{
if (this.nums[i] > x.nums[i]) return 1;
else if (this.nums[i] < x.nums[i]) return -1;
}
return x.nums.Count > this.nums.Count ? -1 : 1;
}
}
class Program
{
static void Main(string[] args)
{
List<Lista1> fir = new List<Lista1> {
new Lista1(5),
new Lista1(),
new Lista1(3)
};
foreach (var variable in fir)
{
//Console.Write ( toString )
foreach (var x in variable.nums)
{
Console.Write(x + " ");
}
Console.WriteLine();
}
Console.WriteLine(fir.ToString());
Console.ReadLine();
}
}
}
我会描述错误,但是我没有任何错误。 fir.ToString显示System.Collections.Generic.List`1 [lista_7.Lista1]
答案 0 :(得分:1)
将fir.ToString()
放入循环中作为variable.ToString()
:
foreach (var variable in fir)
{
Console.WriteLine(variable.ToString());
}
我不确定重写ToString()
方法是不是一个好主意,我宁愿为此创建一个扩展方法,但这是关于它应如何工作的。
答案 1 :(得分:0)
从评论中,他要求您从列表继承并覆盖其ToString()
方法,然后从该列表的列表继承并覆盖其ToString()
方法。
首先,内部列表(由于缺乏更好的用语):
public class InnerList : List<int>
{
public override string ToString()
{
// return the contents of the list somehow formatted as strings.
return string.Join(" ", this);
}
}
接下来,是该列表的列表:
public class OuterList : List<InnerList>
{
public override string ToString()
{
var result = new StringBuilder();
ForEach(inner =>
{
if (inner != null) result.AppendLine(inner.ToString());
});
return result.ToString();
}
}
外部列表的ToString()
方法通过调用其中包含的所有列表的ToString()
方法来工作。
我显然正在弥补覆盖方法中的问题。但是,这是根据您指定的要求覆盖它们的方式。在“现实生活”中,这没有任何意义。我们可以声明一个List<List<int>>
而不创建任何新类,然后编写代码以将其呈现为字符串。我们可以编写代码以两种不同的方式呈现相同的List<List<int>>
。如果我们通过覆盖ToString()
来做到这一点,则表明我们将创建不同的继承类来以不同的格式设置数字。
(有些课程倾向于过分强调继承。它很有用,但看起来好像是对所有问题的解答。)
请注意,也不需要任何一个列表来填充自身。这只会使它更加混乱。您可以编写单独的代码以向其添加数字。