有没有更好/最好的方法来确定VB.NET中传递对象的类型?

时间:2009-05-19 16:11:22

标签: vb.net types

我仍在开发此功能,但这是我打算做的。此函数将接受一个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

3 个答案:

答案 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()];
    }
}

我进行了第二次查看,看起来您正在尝试通过解析来确定存储在字符串中的信息类型 -​​ 在这种情况下,上述操作无效。