我有一个5个对象和5个文本框的数组。我想检查对应的文本框中的值是否对该类型的对象有效。对象数组tryparse
我目前已经硬编码了,我解析出对象类型,然后根据对象类型使用tryparse语句。
我可以自动执行此操作吗?我可以检测类型并使用该类型的tryparse语句。也许是这样的:
if objectarray(x).tryparse(textbox(x).text, nothing)
甘宁
我有一个5个对象和5个文本框的数组。我想检查对应的文本框中的值是否对该类型的对象有效。对象数组tryparse
我目前已经硬编码了,我解析出对象类型,然后根据对象类型使用tryparse语句。
我可以自动执行此操作吗?我可以检测类型并使用该类型的tryparse语句。也许是这样的:
if objectarray(x).tryparse(textbox(x).text, nothing)
甘宁
此要求的问题是,的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