2009-12-03 4 views
36

문자열 형식 매개 변수에 일종의 플래그 또는 한정자를 지정하여 소문자 또는 대문자로 만들 수 있습니까? 내가 원하는 것을C# 문자열 형식 플래그 또는 소문자 매개 변수에 대한 한정자

예 :

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

구인 출력 :

안녕 존, 당신은 6 개 사과가 있습니다.

추 신 : 예 : 문자열 형식으로 사용하기 전에 param의 대/소문자를 변경할 수 있다는 것을 알고 있지만 이것을 원하지 않습니다.

+4

,하지만 난 그냥 (.tolower 호출 이유 참조) 또는 문자열에 .toupper() 할 수 params는 문제입니다. – tjmoore

+5

"문자열 params에서 .tolower() 또는 .toupper()를 호출하는 것이 왜 문제인지는 알 수 없습니다. 예를 들어 데이터 바인딩. – Joe

+0

나는 같은 상황에 처해있다. .ToLower()가 나를 위해 작동하지 않는 이유는 데이터베이스에서 서식 지정 문자열 (예 : 최종 사용자가 구성 가능)을 가져 오는 것입니다. – Ryan

답변

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

+0

형식이 지정되지 않으면'NullReferenceException'이 발생하므로'Format()'메서드의 null 검사 조건을 추가해야합니다. – gabr

6

간단히 말해서, 그렇지 않습니다. AFAIK를 사용하면 소스 값을 수정하거나 직접 교체하여 string.Format을 사용해야합니다. 사용자 지정 문화권 (string.Format)을 전달하는 경우 s.ToLower()이 아닌 culture.TextInfo.ToLower(s)을 사용할 수 있습니다.

+0

필자는 자신의 문자열 포맷터 작성을 제안하려고했습니다. – ChrisF

+0

실제로 - 여기 * 시작 * 할 수 : http://stackoverflow.com/questions/1322037#1322103,하지만 더 많은 ... –

관련 문제