SORU
12 ŞUBAT 2009, PERŞEMBE


Ped ya da sağ dize ile ayrıldı.format () padleft veya padright değil rasgele bir dize ile

Dize kullanabilir miyim.() Biçiminde rasgele karakterler ile belirli bir dize pad için?

Console.WriteLine("->{0,18}<-", "hello");
Console.WriteLine("->{0,-18}<-", "hello");

returns 

->             hello<-
->hello             <-

Ben şimdi bu boşluk, rasgele bir karakter olmak istiyorum. PadLeft veya padRight ile yapamıyorum sebebi farklı bir yerde biçim dizesi oluşturmak için mümkün olmak istiyorum, çünkü zaman/sonra biçimlendirme aslında yürütülür.

---- DÜZENLEYİN
Benim sorunum varolan bir çözüm olarak gözükmüyor gördüğümüz bu (Think Before Coding's suggestion) sonra geldim
--EDİT2--
Think Before Coding's second suggestion için gittim daha karmaşık bazı senaryolar ihtiyacım vardı

[TestMethod]
public void PaddedStringShouldPadLeft() {
    string result = string.Format(new PaddedStringFormatInfo(), "->{0:20:x} {1}<-", "Hello", "World");
    string expected = "->xxxxxxxxxxxxxxxHello World<-";
    Assert.AreEqual(result, expected);
}
[TestMethod]
public void PaddedStringShouldPadRight()
{
    string result = string.Format(new PaddedStringFormatInfo(), "->{0} {1:-20:x}<-", "Hello", "World");
    string expected = "->Hello Worldxxxxxxxxxxxxxxx<-";
    Assert.AreEqual(result, expected);
}
[TestMethod]
public void ShouldPadLeftThenRight()
{
    string result = string.Format(new PaddedStringFormatInfo(), "->{0:10:L} {1:-10:R}<-", "Hello", "World");
    string expected = "->LLLLLHello WorldRRRRR<-";
    Assert.AreEqual(result, expected);
}
[TestMethod]
public void ShouldFormatRegular()
{
    string result = string.Format(new PaddedStringFormatInfo(), "->{0} {1:-10}<-", "Hello", "World");
    string expected = string.Format("->{0} {1,-10}<-", "Hello", "World");
    Assert.AreEqual(expected, result);
}

Kod biraz fazla bir yazı koymak çünkü, github için bir özü olarak taşındım:
http://gist.github.com/533905#file_padded_string_format_info

Orada insanlar kolayca ve her ne olursa olsun, bu şube)

CEVAP
12 ŞUBAT 2009, PERŞEMBE


Başka bir çözüm yolu var.

IFormatProvider, string geçirilecek bir İCustomFormatter dönmek için uygulamak.Biçimi :

public class StringPadder : ICustomFormatter
{
  public string Format(string format, object arg,
       IFormatProvider formatProvider)
  {
     // do padding for string arguments
     // use default for others
  }
}

public class StringPadderFormatProvider : IFormatProvider
{
  public object GetFormat(Type formatType)
  { 
     if (formatType == typeof(ICustomFormatter))
        return new StringPadder();

     return null;
  }
  public static readonly IFormatProvider Default =
     new StringPadderFormatProvider();
}

O zaman bu gibi kullanabilirsiniz :

string.Format(StringPadderFormatProvider.Default, "->{0:x20}<-", "Hello");

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008