C# 格式化地址的不同部分

C# 格式化地址的不同部分,c#,C#,生成一行显示地址的字符串的好方法是什么? 假设地址的各个部分,如Zip、State、Line1、Line2在不同的变量中。 我想产生一些类似于 Line1, Line2, City, State, Zip 请注意,可能缺少某些字段 简单而丑陋的解决方案是检查这些值是否为空,然后决定是否在它们之间添加,但就像我说的,我希望有一个更好的方法?可能是解析器或字符串格式化程序 创建这些值的临时数组,并仅对有效元素使用string.Join: var str = string.Join(", ", ne

生成一行显示地址的字符串的好方法是什么? 假设地址的各个部分,如Zip、State、Line1、Line2在不同的变量中。 我想产生一些类似于

Line1, Line2, City, State, Zip
请注意,可能缺少某些字段


简单而丑陋的解决方案是检查这些值是否为空,然后决定是否在它们之间添加,但就像我说的,我希望有一个更好的方法?可能是解析器或字符串格式化程序

创建这些值的临时数组,并仅对有效元素使用string.Join:

var str = string.Join(", ", new string[] { Line1, Line2, City, State, Zip }
                                .Where(s => !string.IsNullOrEmpty(s)));

下面的步骤应该可以做到这一点

String s = String.Format(" {0}, {1}, {2}, {3}, {4}", Line1, Line2, City, State, Zip).Replace(" ,", String.Empty);
if (s.EndsWith(",")) {
  s=s.SubString(0,s.Length-1);
}

如果您希望字符串更具可读性,例如,如果您记录它,我建议您指出数据不可用,而不是跳过它。此外,还可以将其封装在类中,以使其更易于维护

public class Address
{
    private const string UnknownMessage = "Unknown";
    private const string AddressStringFormat = 
       "Addres Line 1: {0}, Address Line 2: {1}, City: {2}, State: {3}, Zip: {4}";

    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }

    public Address(string addressLine1, string addressLine2, string city, string state, string zip)
    {
        this.AddressLine1 = addressLine1;
        this.AddressLine2 = addressLine2;
        this.City = city;
        this.State = state;
        this.Zip = zip;
    }

    public string GetStringRepresentation()
    {
        return String.Format(AddressStringFormat, 
            String.IsNullOrWhiteSpace(AddressLine1) ? UnknownMessage : AddressLine1,
            String.IsNullOrWhiteSpace(AddressLine2) ? UnknownMessage : AddressLine2,
            String.IsNullOrWhiteSpace(City) ? UnknownMessage : City,
            String.IsNullOrWhiteSpace(State) ? UnknownMessage : State,
            String.IsNullOrWhiteSpace(Zip) ? UnknownMessage : Zip);
    }
}

一种可能的解决方案是将您的值放入字符串数组,然后将它们连接起来。@Filburt:谢谢,请您进一步解释。Konrad Kokosa对此有确切的答案。当引用的地址部分不存在时,该解决方案如何从输出中删除逗号?@chrisly没有。我的假设是,如果您返回一个带有info的字符串,那么您希望该字符串具有代表性。IMHO添加未知消息比跳过字段更具表现力和一致性。更新了答案,表明它没有直接回答问题,而是提出了另一种方法。虽然我理解你的立场,但现实情况是,对于发送地址,你通常只想要你实际拥有的部分。添加unknown只会导致输出的屏幕截图发布到Dailywtf.com;或者,当你打印了5000个信封时,可能会有一个非常疯狂的老板。@ChrisLively表示同意。您不想向用户显示此字符串。我更多地考虑了日志记录。但是,我认为,跳过丢失的数据也不是向用户显示信息的最佳方式。在这种情况下,您可以将GetStringRepresentation的实现更改为一些花哨的东西,例如从某些API获取缺少的数据;