2009-04-17 3 views
3

내가 Vb.net 3.5을 사용하여 클래스에 널 (NULL) 공용 속성이 있습니다VB.net 클래스의 Nullable Public 속성이 할당으로 0을 허용하지 않는 이유는 무엇입니까?

Public Property TicketCharge() As Nullable(Of Decimal) 
     Get 
      If _TicketCharge = Nothing Then 
       Return Nothing 
      Else 
       Return _TicketCharge 
      End If 
     End Get 
     Set(ByVal value As Nullable(Of Decimal)) 
      If value.HasValue Then _TicketCharge = value 
     End Set 
    End Property 

이 값을 할당하는 방법이있다. 그것은 값 0 (영)을 할당하려고 할 때를 제외하고는 정상적으로 작동합니다.

If FundBuySell = "Exchange $" Or FundBuySell = "Exchange Shares" Then 
      TicketCharge = 0 
    Else 

0을 지정하고 검색하면 속성 = 없음이 표시됩니다.

때때로 Null 속성과 때때로 0 속성이 필요합니다. 누군가 일어나는 일을 설명 할 수 있습니까?

답변

2

If _TicketCharge = Nothing은 예상 한대로하지 않습니다 (선동적 인 의견 : 항상 VB.NET에서와 같이 미안하지만 저항 할 수 없음). 당신이 중 하나는 If _TicketCharge Is Nothing 또는

+0

, 나는이 오류가 발생합니다 : "연산자를 입력 진수의 피연산자를 허용하지 않는가요 피연산자는 참조 또는 nullable 형식이어야합니다.." _TicketCharge.HasValue를 사용하면 "HasValue가 Decimal의 멤버가 아닙니다."라는 메시지가 나타납니다. – codethrift

+0

_TicketCharge는 _TicketCharge가 Nullable (Of Decimal)이 아닌 Decimal이라고 말한 적이 없습니다. –

+0

나는 이해하지 못한다. 위에 표시된 바와 같이 Nullable (Decimal)입니다. 내가 변경 한 것은 "_TicketCharge = Nothing"에서 "_TicketCharge Is Nothing"입니다. – codethrift

0

If Not _TicketCharge.HasValue 더 설명 할 필요가 :

아무것도 VB.Net에서 더블 의무를 끌어하지 참조 유형에 대해 "NULL"값과 값 형식에 대한 "기본"값이 모두있다. "Is"또는 "HasValue"대신 "="을 사용하면 value-type 역할로 강제 적용되므로 Nullable 클래스는 값이없는 경우 예외를 throw하는 것을 포함하여 Nullable 클래스를 현재 저장된 값과 비교합니다 세트!). Decimal의 기본값은 0이므로 접근 자의 Get 상단에있는 비교는 True로 평가됩니다.

1

문제는 _TicketChange를 비교하여 값이 있는지를 결정하는 방법입니다. VB.Net에는 빈 값과 참조 유형을 나타내는 여러 가지 의미가 없습니다. Nothing 및 Nullable을 사용하여 부울 논리를 수행하면 예기치 않은 동작이 발생할 수 있습니다.

대신 _TicketChange.HasValue를 사용하십시오.

1

마지막으로이 일을 : 나는 _TicketCharge은 아무것도 사용하는 경우

If Not IsDBNull(var) 
관련 문제