2011-09-14 4 views
3

VB.net에서 nullable로 예기치 않은 효과가 발생합니다. 나는 어떤 암시 적 변환 nullables 거기에 없습니다 알고, 내가 IIf를 사용하여 값을 병합 할 때VB.NET Nullables

Public Property Value As Int32? 

, 내가 널 예외

C#에서
cmd.Parameters.AddWithValue("@HOValue", IIf(headOffice.Value.HasValue, headOffice.Value .Value, DBNull.Value)) 

를 얻을 : 문제의 목적은 정의 된 속성이 있습니다 따라서 ??을 사용할 수는 없지만 IIf의 첫 번째 부분이 VB.NET에서 평가되는 이유는 무엇입니까?

+4

은 참조 : http://stackoverflow.com/q/576431 의미가 더욱 내 VB 증오를 강화 –

답변

3

Iff은 함수입니다. 즉, 인수가 실행되기 전에 인수가 평가됩니다. headOffice.Value이 null이면 여기에서 headOffice.Value.Value을 평가할 수 없습니다.

+0

. 정보를 가져 주셔서 감사합니다. – Echilon

+2

@Echilon이 고통없이 원하는 것을하는 3 가지 'If'도 있습니다. –

+1

vb 2008 이상의 if 문은 사용자가 추구하는 삼항 연산자처럼 작동 할 수 있습니다. If (headOffice.Value.HasValue, headOffice.Value.Value, DBNull.Value) http://blogs.msdn.com/b/vbteam/archive/2008/03/11/if-operator-a-new- and-improved-iif-sophia-salim.aspx – CheckRaise

9

공진은 Iif이 함수이므로 조건 전에 true 값과 false 값이 모두 평가됩니다.

대신 사용 If 즉 :

cmd.Parameters.AddWithValue("@HOValue", If(headOffice.Value.HasValue, headOffice.Value.Value, DBNull.Value)) ' Assuming you've already checked that headOffice.Value IsNot Nothing