【问题标题】:Error Trying to Parse a Generic Type whenType is TimeSpan当Type 为 TimeSpan 时尝试解析泛型类型时出错
【发布时间】:2012-08-11 15:06:32
【问题描述】:

我有以下代码用于尝试将字符串解析为泛型类型。在我使用它的实例中,当我尝试解析为 TimeSpan 时它会失败。输入字符串是"12:34",使用TimeSpan.Parse 可以很好地解析,但我找不到实现<Generic>.Parse 的解决方案

Public Function ParseGeneric(Of T)(ByVal stringValue As String) As T
    Return DirectCast(Convert.ChangeType(stringValue, GetType(T)), T)
End Function

错误:从“System.String”到“System.TimeSpan”的转换无效。

【问题讨论】:

    标签: .net vb.net parsing generics type-conversion


    【解决方案1】:

    如果您不介意一些 C#,TypeDescriptor / TypeConverter 可以在这里提供帮助:

    static T ParseGeneric<T>(string stringValue)
    {
        return (T)TypeDescriptor.GetConverter(typeof(T))
                     .ConvertFromString(stringValue);
    }
    

    如果我必须猜测(完全未经测试)VB:

    Public Function ParseGeneric(Of T)(ByVal stringValue As String) As T
        Return DirectCast(TypeDescriptor.GetConverter(GetType(T)) _
                    .ConvertFromString(stringValue), T)
    End Function
    

    【讨论】:

    • 谢谢马克,VB 很到位。你能解释为什么时间跨度失败是因为日期工作正常吗?
    • @MattWilko 我归结为 IConvertible 在每个中的实现方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多