2014-02-13 1 views
1

변수 Guid를 만들려고합니까? Nullable db 컬럼을 나타냅니다. 나는 값을 할당하는 동안 문제에 직면하고있다. 변수에 null을 쉽게 할당 할 수있었습니다. 그러나 Guid 값을 지정하려면 새 Guid를 만들어야합니까? 문자열을 받아들이지 않는 객체.Nullable에 값 할당 <Guid>

Guid? sample=new Guid?(someString); // erroing "Cannot implicitly convert string to Guid" 

그래서 나는 또한 조건부 값을 할당하고이

Guid? sample=new Guid?(new Guid(someString)); // working code 

처럼해야한다.

Guid? sample=(string.IsNullOrWhiteSpace(someString))?null: new Guid?(new Guid(someString)); 

왜이 문제가 Guid와 함께 나오나요?

+0

'new Guid (someString)'은 결코 null을 반환하지 않습니다 - 왜 여기서 nullable을 사용하고 있습니까? –

+0

@PrestonGuillot :'sample'의 값은 나중에 변경 될 수 있습니다. 우리는 단지 질문에서 초기화를보고 있습니다. –

+0

@Preston 시나리오를 설명하는 코드를 업데이트했습니다. – Thanigainathan

답변

3
Guid? sample = new Guid?(new Guid(someString)); 

이 정말 많은 이해가되지 않습니다. Null 값을 저장할 수있는 nullable 형식이 있습니다. 그러나 값 을 할당하는 경우이면 null이되지 않습니다. 형식의 생성자는 실제로 이 아니며이 반환됩니다. 따라서 new Guid(someString)은 항상 유효한 Guid을 반환하거나 물론 예외를 throw합니다.

Guid? sample = new Guid(someString); 

당신이 잘못된 입력을 고려할 경우, 예를 들면 : 따라서, 당신은 nullable 형식의 변수에 결과 Guid을 할당 할 수 있습니다 someString 단순히 유효 Guid하지 null의 경우, 또는 경우에, 당신은 Guid.TryParse (.NET 4.0 이상)를 사용할 수 있습니다 :이 너무 someString에 다른 검사를 제거 할 수

Guid? sample = null; 
Guid parsed; 
if (Guid.TryParse(someString, out parsed)) 
    sample = parsed; 

하는 것으로. null 문자열이나 다른 것을 전달할 수 있으며 TryParse은 거짓을 반환하여 sample의 기본값을 유지합니다.

+1

'TryParse()'는'IsNullOrWhitespace()'만 검사하면 훨씬 더 나은 해결책입니다. –

+0

@poke - 주셔서 감사합니다. 나는 그것을 지금 사용하고있다. – Thanigainathan

2

Guid에는 string 매개 변수를 사용하는 생성자가 있습니다. 그러나 nullable Guid (Guid?)는 매개 변수로 Guid만을 사용합니다.

6

그러나 Guid 값을 할당하려면 새 Guid를 만들어야합니까? 문자열을 받아들이지 않는 객체. 직접 <T> 유형을 할당 할 수 있습니다

Guid? sample= new Guid(someString); 

nullable 형식 :

당신은 당신의 코드를 줄일 수 있습니다.

int? i = 1; 
int? i2 = null; 

bool? b = true; 
bool? b2 = null; 
+0

감사합니다. Eric. 그러나 과 System.Guid 사이에 암시적인 변환이 없기 때문에 "조건문의 유형을 결정할 수 없습니다."라는 조건문을 사용하면 오류가 발생합니다. 나는 또한 Guid의 유형을 확인했고 구조체 인 것으로 보인다. 여기에 약간의 차이가 있습니까? – Thanigainathan

+0

할당하기 전에 값을 확인하려면 값을 TryParse()하는 것이 가장 좋습니다. [poke 's answer] (http://stackoverflow.com/a/21767541/209259)를 확인하십시오.당신이 질문을 수정하기 전에 당신이 올바른 입력을했다는 것이 내 가정이었다. –