2011-12-11 2 views
1

5 개의 개체 배열과 5 개의 텍스트 상자가 있습니다. 해당 텍스트 상자의 값이 개체 유형에 유효한지 확인하고 싶습니다.개체 배열 tryparse

저는 현재이 코드를 하드 코딩했습니다. 객체 유형을 구문 분석 한 다음 객체 유형에 따라 tryparse 문을 사용합니다.

자동으로 처리 할 수 ​​있습니까? 유형을 감지하고 해당 유형에 대해 tryparse 문을 사용할 수 있습니까? 아마 같은 :

if objectarray(x).tryparse(textbox(x).text, nothing) 

캐닝

답변

1

이 요청에 대한 문제는 TryParse가 개체 수준에서 지정되지 않은 것입니다.

찾고있는 데이터 유형이 고정되어 있으면 확장 메서드를 사용하여 Object 유형을 확장하거나 ObjectArray 구현에 테스트를 추가 할 수 있습니다. 로

public static class MyExtensions 
{ 
    public static bool TryParse(this Object oObject, string s, out int result) 
    { 
     return System.Int32.TryParse(s, out result); 
    } 

} 

및 사용 :

 Object test = new object(); 

     int x; 

     test.TryParse("1", out x); 

업데이트

나는 성공적으로 다음 코드를 사용하여 C#에서 Object 클래스에 확장 메소드를 구현 할 수 있었다 그러나 이것을 Visual Basic으로 이식하려고 시도했을 때 많은 것을 확장 할 수 있지만 Object 데이터는 확장 할 수 없음을 발견했습니다. 이자형. 이 질문에 더 많은 내용이 있습니다 : VB.NET: impossible to use Extension method on System.Object instance

그래서 C#에서 Object를 확장 할 수 있습니다. 또는 임의의 객체가 특정 기본 유형이거나 특정 인터페이스를 구현하는 경우이 기능을 구현하기 위해 확장 할 수 있습니다 .

대신이 기능을 개체 배열 클래스에 직접 추가 한 다음 기본 데이터 형식을 기반으로 호출 할 tryparse를 결정할 수도 있습니다. objectarray 클래스 내에서

:

Public Function TryParse(wIndex As Integer, s As String) As Boolean 

    Dim oObject As Object 

    oObject = Me.Item(wIndex) 

    Select Case oObject.GetType.Name.ToLower 
     Case "int32", "system.int32" 
      Dim wTestInt As Integer 
      Return Int32.TryParse(s, wTestInt) 

      ' Etc... 

    End Select 

End Function