Mam ciąg znaków zawierający 16 znaków alfanumerycznych, np. F4194E7CC775F003. Chciałbym sformatować go jako F419-4E7C-C775-F003.Formatowanie ciągu alfanumerycznego
Próbowałem za pomocą
string.Format("{0:####-####-####-####}","F4194E7CC775F003");
ale to nie działa, ponieważ nie jest to wartość liczbowa.
Więc wymyśliłem następujące:
public class DashFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
return this;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
char[] chars = arg.ToString().ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
if (i > 0 && i % 4 == 0)
{
sb.Append('-');
}
sb.Append(chars[i]);
}
return sb.ToString();
}
}
i za pomocą
string.Format(new DashFormatter(), "{0}", "F4194E7CC775F003");
udało mi się rozwiązać ten problem, jednak miałem nadzieję, istnieje lepszy/prostszy sposób to zrobić to? Być może magia LINQ?
Dzięki.
myślałem, że to było dość proste, ale, niestety, to nie działa: 'string.Format (" {0} {1} {2} {3} - { 4} {5} {6} {7} - {8} {9} {10} {11} - {12} {13} {14} {15} ", aString.ToCharArray()); ciąg' – devuxer
. format wymaga listy parametrów. aString.ToCharArray() jest postrzegany jako jeden parametr tablicy. – Carra