首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeDescriptor不确定日期

TypeDescriptor不确定日期
EN

Stack Overflow用户
提问于 2015-01-22 16:06:58
回答 1查看 164关注 0票数 1

我正在和TypeDescriptor课谈一谈。

我有一个cookie,其中包含一个日期-日期被转换成一个字符串,然后再使用一些帮助方法返回。

我的主要扩展方法之一是用来进行转换,但是它会抛出一个强制错误,因为日期不能从字符串中转换回。

下面是我输出的信息:

22/01/2015 14:29:15不能转换为DateTime

在我看来就像一个DateTime!

这个问题可以通过使用Convert.ToDateTime()来克服,所以通常情况下,代码是可以的。我也使用它的日期和地点,没有问题的日期。

唯一的区别是,我在linq语句的中间进行转换,如下所示:

代码语言:javascript
复制
            Set = new SortedSet<TrackedItem>(set
                .Split(';')
                .Select(s =>
                {
                    var parts = s.Split(',');
                    return new TrackedItem(
                           parts[0].ConvertTo<int>(),
                           Convert.ToDateTime(parts[1]));
                }));

有什么想法吗?

代码语言:javascript
复制
    public static T ConvertTo<T>(this object obj, bool throwInvalid = false)
        where T : IConvertible
    {
        // Object does not require converting.
        if (obj is T) return (T)obj;

        // Determine if object can be converted. 
        var type = typeof(T);
        var converter = TypeDescriptor.GetConverter(type);

        var isConvertible = converter != null && converter.IsValid(obj);

        var error = string.Format("'{0}' could not be converted to type {1}", obj, type.Name);

        // If no conversion is available, and defaults not allowed throw an error. 
        (!isConvertible && throwInvalid).ThrowTrue(error);

        // If the object is convertible, convert it, else return the default(T).
        return isConvertible ? (T)converter.ConvertFrom(obj) : default(T);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-22 16:43:40

我猜,从您的约会示例来看,您正在en-GB文化中运行。不幸的是,为了从this related q/a中获得自由,IsValid总是使用CultureInfo.InvariantCulture (美国日期格式)来决定它的答案。因此,当在en-GB中使用您的示例这样的日期运行时,IsValid将返回false;但是默认情况下使用当前线程区域性的ConvertFrom将成功!

有趣的是,IsValid在很大程度上回避了这是否真的是一个bug的问题:

IsValid方法用于验证类型内的值,而不是确定值是否可以转换为给定类型。例如,可以使用IsValid来确定给定值对于枚举类型是否有效。

因此,实际上您根本不应该在这里使用IsValid --您应该执行相同的文档所建议的操作:

您可以通过在异常块中包装ConvertToConvertFrom方法来编写自己的ConvertTo方法。

在这种方法中,您可以确保使用您真正关心的CultureInfo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28093368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档