2015-05-01 9 views
0

Мне нужно форматировать addres в одной строке. Теперь у меня есть такие свойства, как:Формат адресной строки - почтовый индекс и номер

public string Street { get; set; } 
public string StreetNumber { get; set; } 
public string FlatNumber { get; set; } 
public string PostalCode { get; set; } 
public string City { get; set; } 

Теперь у меня есть

String.Format("{0} {1}/{2} {3} {4}", model.Address.Street, model.Address.StreetNumber, model.Address.FlatNumber, data.Address.PostalCode, data.Address.City); 
  1. Почтовый индекс в формате «ххххх» (х число). Я хочу иметь почтовый индекс в формате «xx-xxx».
  2. Нет всегда числа с плоскими номерами, так как я могу скрыть плоское число и символ '/', если плоское число - пустая строка?
+0

Является ли PostalCode всегда строкой 5 символов? Если не какая часть идет перед черточкой и какая часть позади? – Steve

+1

Операторы IF и некоторые другие переменные –

+0

@steve PostalCode всегда имеет 5 символов – Cieja

ответ

2

Вы можете сделать это:

String.Format("{0} {1} {2} {3}-{4} {5}", 
    model.Address.Street, 
    model.Address.StreetNumber, 
    (!string.IsNullOrEmpty(model.Address.FlatNumber ? '/ ' + model.Address.FlatNumber : ""), 
    data.Address.PostalCode.Substring(0, 2), 
    data.Address.PostalCode.Substring(2), 
    data.Address.City); 

Пару вещей отметить:

  1. Я удалил слэш / из вашей строки формата и добавил заявление, используя ternary operator

    (!string.IsNullOrEmpty(model.Address.FlatNumber ? "/ " + model.Address.FlatNumber : "")

Это будет проверять, если FlatNumber является недействительным и, если нет, то используйте / сопровождаемый FlatNumber или, если это так, используйте только пустую строку.

  1. Я добавил дополнительный индекс в ваш формат, то есть {3}-{4}, для почтового индекса. Тогда ассоциированные заявления будут извлекать части почтового кода идти до и после тире -:

    data.Address.PostalCode.Substring(0, 2) //before the dash data.Address.PostalCode.Substring(2) //after the dash

+0

Это должны быть двойные кавычки ''/'', поэтому это будет строка. – juharr

+0

Спасибо, я исправил. –

0

Попробуйте

 private string postalCode = ""; 
 
     public string PostalCode 
 
     { 
 
      get{return postalCode.Substring(0,2) + "-" + PostalCode.Substring(2);} 
 
      set { postalCode = value.Replace("-",""); } 
 
     }

1

I будет использовать формат {0: 00-000} для почтовой и я просто использовал бы дополнительную переменную, чтобы подготовить плоскую часть как пустую строку или ее значение косой чертой.

public class Address 
{ 
    public string Street { get; set; } 
    public string StreetNumber { get; set; } 
    public string FlatNumber { get; set; } 
    public string PostalCode { get; set; } 
    public string City { get; set; } 

    public override string ToString() 
    { 
    string flatNumberStr = !string.IsNullOrEmpty(FlatNumber) ? "/" + FlatNumber : ""; 
    return string.Format("{0} {1}{2} {3:00-000} {4}", Street, StreetNumber, flatNumberStr, int.Parse(PostalCode), City); 

    } 
} 

private static void Main(string[] args) 
{ 
    Address addr1 = new Address() 
    { 
    Street = "Some Street", 
    StreetNumber = "123", 
    FlatNumber = "F3", 
    PostalCode = "54897", 
    City = "Big City" 
    }; 

    Address addr2 = new Address() 
    { 
    Street = "Other Street", 
    StreetNumber = "12B", 
    PostalCode = "06816", 
    City = "Smaller City" 
    }; 

    Console.WriteLine(addr1.ToString()); 
    Console.WriteLine(addr2.ToString()); 
} 

Этот выходной код:

Некоторые Street 123/F3 54-897 Big City

Другое Улица 12B 06-816 Меньший Город

Теперь заметим, что код работает только в том случае, если PostalCode является числом. Так что проверьте это, прежде чем вы вызовете метод ToString.

Если вы не уверены в его реальной стоимости, но вы уверены, что там будет 5 «цифры», говорят «1234A» будет действительный почтовый индекс, а затем использовать

{3:##-###} 

вместо того, чтобы

{3:00-000}