如何在值为空时打印自定义字符串,使用.net 's字符串.连接方法
本文关键字:字符串 net 使用 方法 连接 自定义 打印 | 更新日期: 2023-09-27 18:05:13
我有以下类:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
public Point(int x, int y)
{
X = x;
Y = y;
}
public override string ToString()
{
return "[" + X + ", " + Y + "]";
}
}
我已经重写了ToString方法,因此,如果尝试将Point对象的值存储在字符串中,它可以具有以下格式:'[X, Y]'。
假设我有一个点数组,我想打印它们,用逗号分隔。
Point point1 = new Point(1, 2);
Point point2 = new Point(10, 20);
Point[] points = new Point[] { point1, point2, null };
Console.WriteLine(string.Join<Point>(", ", points));
这将在屏幕上打印'[1,2],[10,20],'。问题是我想以某种方式打印'[1,2],[10,20],null' -意思是,当我有一个空值时打印'null'。
我想到了一个变通方法,但是从设计上来说,它真的很丑而且不正确。我在Point类中添加了以下代码:
private bool isNull;
public Point(bool isNull = false)
{
this.isNull = isNull;
}
public override string ToString()
{
if (!isNull)
{
return "[" + X + ", " + Y + "]";
}
return "null";
}
现在如果我调用字符串。方法,写入如下:
Point[] points = new Point[] { point1, point2, new Point(true) };
我得到所需的输出'[1,2],[10,20],null]',但正如我写的,我认为这是丑陋和不正确的,所以有人可以帮助我吗?
我真的需要使用字符串。使用Point对象数组连接方法。
你不能改变Join
如何解释null
,所以:首先改变存在null
的事实;如此:
Console.WriteLine(string.Join(", ", points.Select(Point.Render)));
其中Point.Render
为:
internal static string Render(Point point)
{
return point == null ? "null" : point.ToString();
}
然而,我想知道这是否可能是更好的:
public static string Render(IEnumerable<Point> points)
{
if (points == null) return "";
var sb = new StringBuilder();
foreach(var point in points)
{
if (sb.Length != 0) sb.Append(", ");
sb.Append(point == null ? "null" : point.ToString());
}
return sb.ToString();
}
:
Console.WriteLine(Point.Render(points));
或者如果你把它作为一个扩展方法:
Console.WriteLine(points.Render());