2009-08-26 3 views
0

이전에 이런 질문이 있었지만 비슷한 질문에 대한 검색 히트 곡을 열어 보았지만 대답을 얻지 못했습니다.확장 방법의 추론 형식

Nullable에 값이 있는지 확인하는 것을 망설이고 있습니다. myNullable<int> yourAgeint myAge에 할당 할 수 없으며 yourAge이 null 인 경우 예외가 발생합니다. 또한, 우리의 저주받은 연령대 중 하나라도 null 인 경우 왜 fxning SqlParameter에 'deafault'를 할당하지 않도록 fxning 검사를 수행해야합니까? 나는 문명화도 할 수 없다 mySqlParm = myAge.HasValue ? myAge.Value : DBNull.Value.

null 입력 가능 유형의 지점은 무엇입니까? 두려운 Null을 피하기 위해 여전히 pkId에`-1 '을 사용해야합니다. 우리는 심지어 우리 자신의 확장 menthods를 추가 할 수 없기 때문에 '어쩌구'.

왜 심지어 매개 변수를 사용하여 fxning을 귀찮게합니까? 왜 우리는 fxning varchar (10)로 모든 날짜를 저장하지 않습니까?

+2

와우, 당신이 화가있어 귀하의 질문에 무엇 –

+0

있어? Nullable 은 데이터베이스와 어떤 관련이 있습니까? –

+1

어쩌면 "형식 유추 확장 메서드에서"당신이 이것을 작성하는 영감이지만,이 게시물의 오른쪽 제목이 아닙니다. –

답변

6

이유는 yourAge가 null의 경우 int myAge-myNullable<int> yourAge과는 예외가 할당 할 수 없습니다?

물론 가능합니다. 먼저 확인하지 않고 Value 속성을 사용하십시오.

int myAge = yourAge.Value; 

yourAge에 null이 있으면 예외가 발생합니다.

+0

고마워요. @ Guffa, 다른 복잡한 일에 눈이 멀어서 절대로 나에게 일어난 일이 아닙니다. 시험 기반 예제의 경우 – ProfK

3

어쩌면 이렇게할까요?

public static object GetDatabaseValueFromNullableType<T>(this T? value) 
    where T: struct 
{ 
    return value.HasValue ? (object) value.Value : DBNull.Value; 
} 

그리고 당신과 같이 사용할 수 있습니다 :

//this is just a test I wrote but you get the idea 
[Test] 
public void NullableTest() 
{ 
    int? something = null; 
    var value = something.GetDatabaseValueFromNullableType(); 
    Assert.IsTrue(value == DBNull.Value); 
} 
+0

+1. 현상금을받을 자격이 있지만, 다음 번 질문에만 할 수 있습니다. 계속 지켜봐. :-) – ProfK