C# 中的自定义字符串格式化程序
Custom string formatter in C#
C# 中的字符串格式化;
我可以用吗?是的
我可以实现自定义格式吗?号
我需要写一些东西,我可以将一组自定义格式选项传递给 string.Format
,这会对特定项目产生一些影响。
目前我有这样的事情:
string.Format("{0}", item);
但我希望能够对那个项目进行操作:
string.Format("{0:lcase}", item); // lowercases the item
string.Format("{0:ucase}", item); // uppercases the item
string.Format("{0:nospace}", item); // removes spaces
我知道我可以做 .ToUpper()
、.ToLower()
等事情,但我需要用字符串格式来做。
我一直在研究 IFormatProvider
和 IFormattable
之类的东西,但我真的不知道它们是否是我应该使用的东西,或者如何实现它们。
谁能解释一下我该如何解决这个问题?
原理(以防万一你想知道...)
我有一个小程序,我可以在其中输入一组以逗号分隔的值和一个模板。这些项目连同创建输出的模板一起传递到 string.Format
。我想提供模板格式选项,以便用户可以控制他们希望项目如何输出。
您可以制作自定义格式化程序,例如:
public class MyFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string fmt, object arg, IFormatProvider formatProvider)
{
if(arg == null) return string.Empty;
if(fmt == "lcase")
return arg.ToString().ToLower();
else if(fmt == "ucase")
return arg.ToString().ToUpper();
else if(fmt == "nospace")
return arg.ToString().Replace(" ", "");
// Use this if you want to handle default formatting also
else if (arg is IFormattable)
return ((IFormattable)arg).ToString(fmt, CultureInfo.CurrentCulture);
return arg.ToString();
}
}
然后像这样使用它:
string.Format(new MyFormatter(),
"{0:lcase}, {0:ucase}, {0:nospace}",
"My Test String")
这应该return:
my test string, MY TEST STRING, MyTestString
C# 中的字符串格式化;
我可以用吗?是的
我可以实现自定义格式吗?号
我需要写一些东西,我可以将一组自定义格式选项传递给 string.Format
,这会对特定项目产生一些影响。
目前我有这样的事情:
string.Format("{0}", item);
但我希望能够对那个项目进行操作:
string.Format("{0:lcase}", item); // lowercases the item
string.Format("{0:ucase}", item); // uppercases the item
string.Format("{0:nospace}", item); // removes spaces
我知道我可以做 .ToUpper()
、.ToLower()
等事情,但我需要用字符串格式来做。
我一直在研究 IFormatProvider
和 IFormattable
之类的东西,但我真的不知道它们是否是我应该使用的东西,或者如何实现它们。
谁能解释一下我该如何解决这个问题?
原理(以防万一你想知道...)
我有一个小程序,我可以在其中输入一组以逗号分隔的值和一个模板。这些项目连同创建输出的模板一起传递到 string.Format
。我想提供模板格式选项,以便用户可以控制他们希望项目如何输出。
您可以制作自定义格式化程序,例如:
public class MyFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string fmt, object arg, IFormatProvider formatProvider)
{
if(arg == null) return string.Empty;
if(fmt == "lcase")
return arg.ToString().ToLower();
else if(fmt == "ucase")
return arg.ToString().ToUpper();
else if(fmt == "nospace")
return arg.ToString().Replace(" ", "");
// Use this if you want to handle default formatting also
else if (arg is IFormattable)
return ((IFormattable)arg).ToString(fmt, CultureInfo.CurrentCulture);
return arg.ToString();
}
}
然后像这样使用它:
string.Format(new MyFormatter(),
"{0:lcase}, {0:ucase}, {0:nospace}",
"My Test String")
这应该return:
my test string, MY TEST STRING, MyTestString