I would use {0:00-000} format for postal code and I would simply use extra variable to prepare flat part as empty string or its value with the slash.
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());
}
This code output is:
Some Street 123 / F3 54-897 Big City
Other Street 12B 06-816 Smaller City
Now note that the code only works if PostalCode is a number. So do check that before you call ToString method.
If you are not sure about its actual value, but you are sure that there will be 5 "digits", say "1234A" would be a valid postal code, then use
{3:##-###}
instead of that
{3:00-000}