2010-07-21 4 views
3

내가 VB.net에서 일부 코드를 검토하고있어, 및 검증 객체들은 다음IsDate (날짜)를 false로 되돌릴 수있는 방법이 있습니까?

If Not IsDate(Entity.SelectedDate) Then 
      ErrorList.Add(New CValidationError("MainReport", "Please select a weekend date")) 

되어 selectedDate이 Date 형입니다 작성했습니다. 나는이 조건에 부딪치지 않는 것이 나에게 보인다. 사실입니까?

+0

어쩌면 어느 시점에서 Entity.SelectedDate가 날짜 유형이 아니 었나요? – JeffO

+0

여기에 같은 종류의 코드가 있습니다. 나는 내 코드의 값이 문자열 유형이라고 생각했다. – Abacus

답변

3

내가 Reflector에서 볼 무엇인가?

번호

If (Expression Is Nothing) 

은 박스 값 유형에 대한 사실 결코 것입니다.이 방법은 명시 적으로 Date을 통과하면

If TypeOf Expression Is DateTime 

이것은 항상 사실 일 것입니다. B이 (그렇지 않은) A의 서브 클래스 인 경우 TypeOf A Is B가 false 반환하더라도

, 당신은 은 여전히 ​​이 항상 값 유형으로, DateTime (때문에), true가 반환 가정 할 수는 상속 될 수 없습니다.

여러분이 좋아요.

가장 좋은 추측은이 코드가 원래 String 또는 Object에 강력히 형식화되지 않은 IsDate이라고 불렀습니다. 어느 시점에 누군가 SelectedDate 속성을 Date으로 입력해야이 유효성 검사 코드를 업데이트하지 않아도됩니다.

+0

위대한 대답, 매우 명확하고 잘 조직. 고마워요! –

0

나는이 조건을 치는 것이 가능하다고 생각하지 않습니다. SelectedDate는 Calendar 컨트롤이나 OnSelectionChanged 이벤트 핸들러에서만 설정할 수 있습니다. 그 경우에도 값은 날짜 또는 Null로만 설정할 수 있습니다. 아마도 Null이 아닌 값이 선택되었는지 확인해야합니다. 그렇지 않으면 수표를 모두 버리십시오.

+0

그건 기본적으로 내 생각이었는데, 이것은 인증에 추가 한 바보 같은 실수 인 것처럼 보였습니다. 그러나 나는 확신해야한다고 생각했습니다. 답변 주셔서 감사합니다. –

0

오류가 발생하지 않을 것입니다. SelectedDate는 Date 유형입니다. 이 날짜가 맞는지 확인해 보겠습니다.

+0

내 생각은 정확하게, 심지어 기본값 (uninstantiated)에서 그것은 여전히 ​​날짜 형식입니다. –

1

ISDATE는 항상 날짜로 변환 할 수있는 모든 객체에 대해 true를 반환합니다 : 그것은 심지어 당신이

dim myDate as Date 
myDate = Nothing 
IsDate(myDate) 

http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/3f70ef9e-79d0-4c89-ac33-ea16829e8298하는 경우에 true를 돌려줍니다 http://msdn.microsoft.com/en-us/library/00wf8zk9%28VS.80%29.aspx

말한다 :

날짜가 값 유형이고 참조 유형이 아니므로 Nothing to assign to 날짜 유형의 변수는 기본값 인 값으로 설정됩니다 (Lars의 설명 참조).

그래서 IsDate (date)는 항상 true를 반환합니다.

IsDate는 표준 VB 함수를 참조하며 다른 곳에서는 작성된 사용자 정의 함수가 아닙니다. 유효성 검사 오류 텍스트는 주말 날짜를 참조하므로 사용자 정의 함수 일 수 있습니다. 마우스 오른쪽 버튼을 클릭하고 "정의로 이동"을 클릭하여 Visual Studio의 위치를 ​​확인합니다. Microsoft.VisualBasic 네임 스페이스에있는 경우에는 항상 true를 반환 할 것이라고 말합니다.

+1

두 번째 진술이 정확하지 않습니다. 'IsDate (Nothing)'은 false를 반환합니다. 당신이 제공 한 링크에서, 질문을하는 사람은'Date a Nothing = Date '을 썼다.'DateTime.MinValue'라고 생각되는'DateTime' 타입의 ** default ** 값에'a'를 대입합니다.); 그래서 그는 실제로 IsDate에 Nothing을 넘겨주지 않았다. 그는 기본 'DateTime'값을 전달했습니다. –

+0

@Dan Tao 감사합니다. 수정시 수정되었습니다. – bgs264

0

주말을 확인하는 것처럼 보이므로, 토요일이나 일요일에 DateTime.DayOfWeek를 확인하지 않으시겠습니까?

0

실제로 IsDate는 Microsoft.VisualBasic 네임 스페이스입니다. 주말 날짜 오류 메시지는 실제로 주일이 끝나는 날짜 (보통 금요일)를 묻습니다. 이것이 항상 사실로 돌아갈 것이 분명해졌습니다. 자원과 확인을 위해 모두에게 감사드립니다. 이제

Public Shared Function IsDate(ByVal Expression As Object) As Boolean 
    Dim time As DateTime 
    If (Expression Is Nothing) Then 
     Return False 
    End If 
    If TypeOf Expression Is DateTime Then 
     Return True 
    End If 
    Dim str As String = TryCast(Expression,String) 
    Return ((Not str Is Nothing) AndAlso Conversions.TryParseDate(str, (time))) 
End Function 

, 질문은 다음과 같습니다 : (DateTime 값 VB.NET의 키워드)를 Date을 통과하는 경우이 방법은 지금까지 false를 반환 할 수 여기에

+0

안녕 링크 리프트, 다시보고 주셔서 감사합니다. 일반적으로이 질문은 별도의 대답이 아닌 원래 질문에 대한 의견으로 게시합니다. – MarkJ

관련 문제