Строка адреса формата - почтовый индекс и номер квартиры

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

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. Не всегда существует плоский номер, так как я могу скрыть плоский номер и символ «/», если плоский номер представляет собой пустую строку?

person mskuratowski    schedule 01.05.2015    source источник
comment
Является ли PostalCode всегда строкой из 5 символов? Если нет, то какая часть идет перед тире и какая часть позади?   -  person Steve    schedule 01.05.2015
comment
Операторы IF и некоторые другие переменные   -  person Hugo Yates    schedule 01.05.2015
comment
Почтовый индекс @steve всегда состоит из 5 символов.   -  person mskuratowski    schedule 01.05.2015


Ответы (3)


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

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. Я удалил косую черту / из строки вашего формата и добавил оператор, используя тернарный оператор

    (!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

person rory.ap    schedule 01.05.2015
comment
Это должны быть двойные кавычки "/ ", чтобы это была строка. - person juharr; 01.05.2015

Я бы использовал формат {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());
}

Этот вывод кода:

Some Street 123 / F3 54-897 Большой город

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

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

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

{3:##-###} 

вместо этого

{3:00-000}
person Wapac    schedule 01.05.2015

Попробуй это

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

person jdweng    schedule 01.05.2015