2014-03-03 3 views
0

다음 코드를 고려하십시오.기본 GUID 서식 지정

var guid = Guid.NewGuid(); 
var a = guid.ToString(); 
var b = guid.ToString("N"); 

a의 값은 7c9e6679-7425-40de-944b-e07fc1f90ae7 것 같습니다.
b의 값은 7c9e6679742540de944be07fc1f90ae7입니다.

.NET에 두 번째 형식을 알려주는 방법이 있습니까? 형식 문자열 N이 기본적으로 필요합니까?

다른 유형의 ToString (예 : DateTime)에 대한 기본 동작은 현재 문화권에 묶여 있습니다. Guid의 기본 동작이 비슷한 방식으로 문화권에 묶여있는 것일 수 있습니까? (의심 스럽네요.)

호환성을 위해 코드베이스에서 대시가없는 GUID 문자열 표현이 표준이되어야하지만 아무런 경고없이 N 매개 변수를 잊어 버리는 것은 매우 쉽습니다.

+0

이 방법이 효과가 있을지는 모르겠지만 시도해 볼만합니다. http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.numberformat(v=vs.110).aspx – Paparazzi

+0

'Guid'는'IFormattable' 타입이지만'IFormatProvider'는 "전체"오버로드 ['ToString (string, IFormatProvider)'] (http://msdn.microsoft.com/en-us/library/s6tk2z69.aspx)는 무시됩니다. 인용구 : *'provider' 매개 변수는 나중에 사용하기 위해 예약되어 있으며이 메서드의 실행에 기여하지 않습니다. 메서드 호출에서 null을 전달할 수 있습니다. * –

+0

@Blam'Guid.ToString()'은 사용자 정의 형식 공급자를 무시합니다. –

답변

4

아니오 documentation on this는 분명하다 :

레지스트리 형식의이 인스턴스의 값의 캐릭터 라인 표현을 돌려줍니다.

그리고

반환 값
유형 : System.String
은 "D"형식 지정자를 사용하여 포맷이 Guid의 값은 다음과 같이
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

일부 다른 객체의 경우3210은 로케일 포맷터를 참조하지만 불행히도 Guid을 참조하지는 않습니다.

public static class GuidExtensions 
{ 
    public static string ToMyString(this Guid guid) 
    { 
     return guid.ToString("N"); 
    } 
} 

// elsewhere 
Guid guid = /* ... */; 
Console.WriteLine(guid.ToMyString()); 

하지만 이것은 "N"을 잊고만큼 쉬운 것입니다 전화를 잊고 가정 해 봅시다 그래서이 개선 많이하지 않을 수 있습니다 :

대신 Guid 및 사용에 대한 extension method을 정의 할 수 있습니다. (어쨌든이 경로를 사용하는 경우 ToMyString()보다 확장 메서드에 대한 더 나은 이름을 생각해보십시오.)

+0

"이 문서는 명확합니다." 나는 노련한 C#/.NET 개발자이며 여기에 게시하기 전에 관련 문서를 정확히 살펴 보았습니다. 그것은 명확하지 않다. ['DateTime.ToString' 문서 (http://msdn.microsoft.com/en-us/library/k494fzbf(v=vs.110) .aspx)를 보면, 기본 형식이 지정되지 않으면'G' 형식입니다. 그런 다음 'G'가 실제 서식을 결정하기 위해 현재 문화권 설정을 사용하는 방법에 대해 이야기합니다. 'Guid.ToString'에서 비슷한 언어가 생략되었다고해서 그것을 구성하는 기능이 빠져 있음을 보증하지는 않습니다. –

+2

Guid.ToString은 분명합니다. 나는 틀린 생각으로 DateTime.ToString이 Guid.ToString에서 어떤 종류의 기능을 암시했는지 생각하지 않습니다. –

1

.NET에 두 번째 형식 (형식 문자열 N)이 기본적으로 필요하다는 것을 알리는 방법이 있습니까?

아니요, 기본 동작은 Guid.ToString()입니다.

다음과 같이 "D"형식 지정자를 사용하여 포맷이 GUID의 값을, 상기 GUID의 값이 8 기, 4,4- 소문자 일련의 16 진수로 표현된다 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx , 4 및 12 자리로 구분되며 하이픈으로 구분됩니다. 반환 값의 예는 "382c74c3-721d-4f34-80e5-57657b6cbc27"입니다. ~ f에서 16 진수를 대문자로 변환하려면 반환 된 문자열에서 String.ToUpper 메서드를 호출합니다.

당신 정의의 FxCop 규칙을 추가 (또는 다른 정적 분석 도구 사용자 정의) 에를 Guid.ToString() 사용을 감지하지만을 방지 할 수 있습니다.