我仍在开发此功能,但这是我打算做的。此函数将接受一个Object,然后尝试确定其类型。我正在寻找一组特定的类型:Integer,Boolean,Date,String。到目前为止,我所拥有的是相当不错的,但到目前为止似乎有效:
Private Function DataType(ByVal entry As Object) As ValueType
Try
If IsNumeric(entry) Then
If Integer.Parse(entry) Then
Return ValueType.Number
End If
End If
Catch
End Try
Try
If Boolean.Parse(entry) Then
Return ValueType.Boolean
End If
Catch
End Try
Try
If Not Date.Parse(entry) = Nothing Then
Return ValueType.Date
End If
Catch
End Try
Return ValueType.Text
End Function
答案 0 :(得分:4)
我建议使用TypeOf代替Parse或TryParse
If TypeOf entry Is Integer Then ...
答案 1 :(得分:2)
您必须决定是否接受"42"
为整数。对象类型仍为String
!
无论如何,可以删除使用IsNumeric
的try-blocks和附加检查 - 只需使用TryParse-Functions
Dim IntResult As Integer
If Integer.TryParse("42", IntResult) Then
' Parsing succeeded - Result is stored in IntResult '
Else
' Failed! '
End If
如果可以在编译时检查类型,则可以使用参数重载。
答案 2 :(得分:0)
我是一名C#开发人员,我并没有完全解读你的代码,但我会使用字典来映射对象的类型和其他东西 - 我假设你返回一个枚举值。这是一个C#示例。在实际代码中,字典可能不应该构建在每个方法调用上。
public enum ValueType
{
Unknown, Number, Boolean, Date, String
}
public static ValueType DataType(Object o)
{
Dictionary<Type, ValueType> map =
new Dictionary<Type, ValueType>
{
{typeof (Int32), ValueType.Number},
{typeof (Int64), ValueType.Number},
{typeof (Decimal), ValueType.Number},
{typeof (Single), ValueType.Number},
{typeof (Double), ValueType.Number},
{typeof (Boolean), ValueType.Boolean},
{typeof (DateTime), ValueType.Date},
{typeof (String), ValueType.String}
};
if ((o == null) || (!map.ContainsKey(o.GetType())))
{
return ValueType.Unknown;
}
else
{
return map[o.GetType()];
}
}
我进行了第二次查看,看起来您正在尝试通过解析来确定存储在字符串中的信息类型 - 在这种情况下,上述操作无效。