String.Format - 작동 방법 및 사용자 정의 형식 문자열 구현 방법
와 함께String.Format()
, " 들 포 수 니 다 할 맷 니DateTime
여러 가지 방법으로 물건을 만듭니다.원하는 형식을 찾을 때마다 인터넷에서 검색해야 합니다.거의 항상 저는 제가 사용할 수 있는 예를 찾습니다.예:
String.Format("{0:MM/dd/yyyy}", DateTime.Now); // "09/05/2012"
하지만 저는 그것이 어떻게 작동하는지, 그리고 어떤 클래스가 이러한 '마법적인' 추가 문자열을 지원하는지에 대해 전혀 알지 못합니다.
그래서 제 질문은 다음과 같습니다.
- 안녕하십니까?
String.Format
.MM/dd/yyyy
현 결과로? - 모든 Microsoft 개체가 이 기능을 지원합니까?
이것은 어딘가에 문서화되어 있습니까? - 다음과 같은 작업이 가능합니까?
String.Format("{0:MyCustomFormat}", new MyOwnClass())
String.Format
내의 각합니다.{0}
기타) 해당 개체에 대해: https://learn.microsoft.com/en-us/dotnet/api/system.string.format#overloads
형식 문자열은 선택적으로 제공됩니다.
{ index[,alignment][ : formatString] }
한다면formatString
제공된 경우, 해당 객체는 IFormatable을 구현해야 하며, 구체적으로ToString
는 를 받아들이는 방법formatString
해당하는 형식의 문자열을 반환합니다. https://learn.microsoft.com/en-us/dotnet/api/system.iformattable.tostring
안 안IFormatProvider
기본 포맷 표준/표준 등을 캡처하는 데도 사용할 수 있습니다.여기와 여기에 있는 예들.
질문에 대한 답변은 다음과 같습니다.
은 합다사니용을 합니다.
IFormattable
인이스의ToString()
에 있는DateTime
반대하고 통과합니다.MM/dd/yyyy
문자열을 입니다.올바른 문자열을 반환하는 것이 바로 구현입니다.구하는모개체를
IFormattable
에서는 이 기능을 지원합니다.여러분은 심지어 자신의 것도 쓸 수 있습니다!예, 위를 참조하십시오.
제가 알기로는 이를 지원하기 위해서는 당신의 수업에서 I 형식표를 구현해야 할 것 같습니다.그런 다음 전달한 매개 변수를 String으로 가져오는 ToString 메서드가 있습니다.포맷.
여기 예가 있습니다.
// Define other methods and classes here
public class Sample : IFormattable
{
public string ToString(string format, IFormatProvider provider)
{
return String.Concat("Your custom format was ", format);
}
}
String.Format("{0:MyCustomFormat}", new Sample())
공식 MSDN 문서를 확인하십시오. DateTime 형식 문자열의 전체 목록이 여기에 있습니다. http://msdn.microsoft.com/en-us/library/az4se3k1.aspx .실제로 꽤 많은 "마법적인" 끈이 있습니다.
이 "가지고 있는 것은 , 모든 이 "재미있는" 형식을 지원합니다.
ToString()
기본 제공 개체를 포맷해야 하는 경우 확장 방법을 추가하여 이를 수행할 수 있지만, 일반적으로 포맷은 필요한 모든 위치에서 제공됩니다(또는 다른 말로 하자면, 저는 제 유형에 맞는 사용자 지정 포맷만 작성했습니다).예, 직접 작성할 수 있으며 다른 방식으로 포맷할 수 있는 데이터가 있는 경우 IFormatable을 구현하여 사용자 지정 포맷터를 작성해야 할 수도 있습니다. http://msdn.microsoft.com/en-us/library/system.iformattable.aspx 의 문서를 다시 참조하십시오.꽤 간단합니다. 제공된 문자열을 확인하고 이를 기반으로 데이터를 작성하기만 하면 됩니다. 배후에 마법이 없습니다.-)
덮개 밑에 끈이 있습니다.형식은 다음과 같은 작업을 수행합니다.
IFormattable formattable = objectToFormat as IFormattable;
if (formattable != null)
{
formattable.ToString(objectToFormat);
}
else
{
objectToFormat.ToString();
}
질문은.
String은 어떻게 작동합니까?형식은 추가 정보 MM/dd/yyyy를 문자열 결과에 매핑합니까?
위에서 지정한 대로 IFormattable만 호출합니다.ToString(문자열 형식, IFormatProvider 제공자).공급자는 시스템의 문화를 알려주는 역할을 하는 경우가 많습니다.사람들이 문자열을 전달하지 않기 때문에 종종 null입니다.사용자의 경우와 마찬가지로 형식()을 지정합니다.
모든 Microsoft 개체가 이 기능을 지원합니까?이것은 어딘가에 문서화되어 있습니까?
I 형식 테이블을 구현하는 모든 것이 가능합니다.
을 할 수 : 다과같작음가능니까합이업?
String.Format("{0:MyCustomFormat}, new MyOwnClass())
기본적으로 사용자 자신의 개체가 구현한 형식으로 무언가를 수행하기를 원하는 경우입니다.
형식 문자열이 대체로 비슷하지만 수많은 지원 클래스와 열거자가 있습니다.여기 더 있습니다.
날짜에 대한 설명서는 http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx 에서 확인할 수 있습니다.
그것은 MM과 같은 모든 날짜 형식 문자가 의미하는 바를 정확히 말해줄 것입니다.
사용자 지정 클래스에 대한 문자열 출력 방법을 변경하려면 다음과 같이 ToString 메서드를 재정의할 수 있습니다.
public class User
{
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return this.Name + " is " + this.Age + " years old.";
}
}
그리고 나서 당신은 그냥 다음과 같은 것을 할 수 있습니다.myUser.ToString()
지정한 출력을 가져옵니다.
그리고 당신의 세 번째 질문에 답하기 위해:이 구문에서는 불가능하지만 다음의 인스턴스를 제공할 수 있습니다.IFormatProvider
그리고.ICustomFormatter
유형의 IFormattable
당신의 타입 안에서 (하지만, 그것은 기본적으로 확장됩니다.ToString
).
예, 가능합니다. 완전히 사용자 지정할 수 있습니다.날짜 및 시간에 대한 사용자 지정 형식을 확인하십시오.
만약 당신이 당신의 목적을 가지고 있다면, 그것은 당신에게 달려있습니다.ToString()
적절한 표현이라고 생각하는 것은 무엇이든 방법과 출력입니다.이 작업을 수행하면 다음을 사용할 수 있습니다.String.Format("{0:MyCustomFormat}", new MyOwnClass())
왜냐하면 이것은 암시적으로 부르기 때문입니다.MyOwnClass.ToString()
언급URL : https://stackoverflow.com/questions/10512349/string-format-how-it-works-and-how-to-implement-custom-formatstrings
'programing' 카테고리의 다른 글
괄호 사이의 텍스트를 반환하는 정규식 (0) | 2023.05.22 |
---|---|
MongoDB - 오류: 잘못된 스키마, mongodb가 필요합니다. (0) | 2023.05.22 |
손상된 파일 처리 (0) | 2023.05.17 |
Azure 큐 저장소에서 개체 메시지 전달 (0) | 2023.05.17 |
임의의 길이의 목록 요소의 가능한 모든 (2^N) 조합 가져오기 (0) | 2023.05.17 |