如何在值为空时打印自定义字符串,使用.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对象数组连接方法。

如何在值为空时打印自定义字符串,使用.net 's字符串.连接方法

你不能改变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());