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

  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009
  • HER0R

    HER0R

    16 Aralık 2007
  • The Slow Mo Guys

    The Slow Mo

    15 AĞUSTOS 2010