c# - 打印 ArrayList 的值而不是类名
问题描述
我想为 ArrayList AL 中的每个对象打印所有十个随机生成的点。
public class Point
{
public int x;
public int y;
public Point(int x, int y)
{
x = this.x;
y = this.y;
}
}
public class ArrayListTest
{
public static void Main(string[] args)
{
ArrayList AL = new ArrayList();
Random Rnd = new Random();
for (int i = 1; i <= 10; i++)
{
Point p = new Point(Rnd.Next(50), Rnd.Next(50));
AL.Add(p);
}
PrintValues(AL);
}
public static void PrintValues(IEnumerable myList)
{
foreach (Object obj in myList)
Console.WriteLine("{0} ", obj);
}
}
控制台输出:
Point
Point
Point
Point
Point
Point
Point
Point
Point
Point
我的问题是,打印的对象的类名而不是对象的值。我正在使用 .NET Framework v4.8
解决方案
Point
(顺便说一句:我建议你不要定义自己的类名为
所以,当你这样做时Console.WriteLine(object obj)
,它内部Console.WriteLine()
最终会调用object.ToString()
以确定要写入的字符串。
默认情况下,如果您不编写自己的实现ToString()
,它将返回类的名称 - 这就是您Point
在输出中看到的原因。
由于您正在编写自己的Point
类,因此您可以覆盖它ToString()
以返回格式化的字符串。这是最好的解决方案。
假设您的Point
类具有 X 和 Y 值,您可以通过将以下内容添加到类中来做到这一点:
public override string ToString()
{
return $"X={x}, Y={y}";
}
如果您不想这样做(或者假设它是您无法更改的第三方类),则必须在将字符串传递给Console.WriteLine()
.
不幸的是,因为您使用的是 ,所以ArrayList
最终只有一个object
- 所以为了格式化它,您需要将它转换为正确的类型,以便获得它的 X 和 Y 值:
foreach (Object obj in myList)
{
Point p = (Point)obj;
Console.WriteLine("X={0}, Y={1}", p.x, p.y);
}
或者,如果您将循环变量声明为正确的类型,您可以利用 a foreach
for anIEnumerable
将为您执行强制转换的事实:
foreach (Point p in myList)
{
Console.WriteLine("X={0}, Y={1}", p.x, p.x);
}
然而,更好的是使用List<Point>
而不是ArrayList
- 那么元素将是类型Point
:
static class Program
{
public static void Main(string[] args)
{
List<Point> AL = new List<Point>();
Random Rnd = new Random();
for (int i = 1; i <= 10; i++)
{
Point p = new Point(Rnd.Next(50), Rnd.Next(50));
AL.Add(p);
}
PrintValues(AL);
}
public static void PrintValues(IEnumerable<Point> myList)
{
foreach (var p in myList)
{
Console.WriteLine("X={0}, Y={1}", p.x, p.x);
}
}
}
最后一点,您可能需要考虑使用System.Drawing.Point
orSystem.Windows.Point
结构而不是滚动您自己的Point
类。
推荐阅读
- swift - 如何将 inputView 与 SwiftUI TextField 一起使用?
- node.js - 如何在节点js中提交表单后减少金额
- java - 原子操作如何工作以及线程如何不能被抢占。是 OS 保证还是 JVM 保证?
- r - R在满足3个条件的情况下比较一列中的行值
- javascript - 如何创建与缩略图不同的图像的轻量级 CSS 图像库?
- mysql - 是否可以在 MYSQL 中的查询之上运行排名函数
- java - 使用二叉搜索树的 TreeMap
- sql - 下面的 SQL 语句是否正确?
- php - phpoffice\phpspreadsheet - 数据系列值 -> 数据源
- python - 如何在 GridSearchCV 的 keras 模型的超参数优化中使用简单的验证集?