2011-12-11 84 views
1

我有一个5个对象和5个文本框的数组。我想检查对应的文本框中的值是否对该类型的对象有效。对象数组tryparse

我目前已经硬编码了,我解析出对象类型,然后根据对象类型使用tryparse语句。

我可以自动执行此操作吗?我可以检测类型并使用该类型的tryparse语句。也许是这样的:

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

甘宁

回答

1

此要求的问题是,的TryParse不是在对象级别指定。

如果您正在寻找一组固定的数据类型,那么您可以使用扩展方法来扩展Object类型,或者可以将测试添加到ObjectArray实现中。

更新

我可以用下面的代码成功实现在C#Object类的扩展方法:

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); 

但是,当我尝试将此端口移植到Visual Basic时,我发现可以扩展很多东西,但不能使用Object数据类型即这个SO问题有更多细节:VB.NET: impossible to use Extension method on System.Object instance

所以,你可以在C#中扩展Object,或者如果你的arrary中的对象是特定的基类型或者实现了一个特定的接口,你可以扩展它来实现这个功能。

另一种方法是将此功能直接添加到对象数组类中,然后根据基础数据类型确定调用哪个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