2009-12-03 54 views
36

是否可以在字符串格式参数上指定某种标志或修饰符以使其成为小写或大写?我想要什么C#字符串格式标志或修饰符转为小写参数

例子:

String.Format("Hi {0:touppercase}, you have {1} {2:tolowercase}.", "John", 6, "Apples"); 

通缉输出:

JOHN嗨,你有6个苹果。

PS:是的,我知道我可以在使用字符串格式之前更改param的大小写,但我不想要这样做。

+4

我知道你不想要它,但我不明白为什么只是调用.tolower()或字符串.toupper() params是一个问题。 – tjmoore 2009-12-03 12:46:11

+5

“我看不出为什么在字符串params上调用.tolower()或.toupper()是一个问题” - 例如,数据绑定。 – Joe 2009-12-04 20:02:29

+0

我有同样的情况。原因.ToLower()对我不起作用的是格式化字符串来自数据库(即,它可由最终用户配置)。 – Ryan 2012-05-14 20:15:10

回答

55

只有填充和对齐格式...所以简单的方法就像你说的,使用"John".ToUpper()"John".ToLower()

另一种解决方案可以创建一个自定义IFormatProvider,以提供所需的字符串格式。

这是如何看待IFormatProvider和string.Format调用。

public class CustomStringFormat : IFormatProvider, ICustomFormatter 
{ 
    public object GetFormat(Type formatType) 
    { 
     if (formatType == typeof(ICustomFormatter)) 
      return this; 
     else 
      return null; 

    } 

    public string Format(string format, object arg, IFormatProvider formatProvider) 
    { 
     string result = arg.ToString(); 

     switch (format.ToUpper()) 
     { 
      case "U": return result.ToUpper(); 
      case "L": return result.ToLower(); 
      //more custom formats 
      default: return result; 
     } 
    } 
} 

和呼叫的样子:

String.Format(new CustomStringFormat(), "Hi {0:U}", "John"); 
+1

有没有办法在DisplayFormatAttribute的范围内做到这一点? – howcheng 2014-07-28 17:11:34

+0

如果未指定格式,将会有'NullReferenceException',因此应该添加'Format()'方法中的空检查条件。 – gabr 2016-01-21 13:37:04

6

总之,没有; AFAIK你必须修复源值,或使用你自己的替代品string.Format。请注意,如果您传递的是自定义文化(至string.Format),则可能需要使用culture.TextInfo.ToLower(s),而不仅仅是s.ToLower()

+0

我只是建议编写你自己的字符串格式化程序。 – ChrisF 2009-12-03 12:47:47

+0

的确 - 您可能*开始*在这里:http://stackoverflow.com/questions/1322037#1322103,但还有很多事情要做... – 2009-12-03 12:49:08

相关问题