【问题标题】:Generic conversion function doesn't seem to work with Guids通用转换功能似乎不适用于 Guid
【发布时间】:2010-09-28 11:13:56
【问题描述】:

我有以下代码:

public static T ParameterFetchValue<T>(string parameterKey)
{
    Parameter result = null;

    result = ParameterRepository.FetchParameter(parameterKey);

    return (T)Convert.ChangeType(result.CurrentValue, typeof(T), CultureInfo.InvariantCulture);  
}

result.CurrentValue 的类型是字符串。我希望能够将其转换为 Guid,但我不断收到错误消息:

从 System.String 到 System.Guid 的无效转换

这非常适用于原始数据类型。
有什么方法可以使这项工作适用于非原始数据类型

【问题讨论】:

    标签: c# .net generics typeconverter


    【解决方案1】:

    怎么样:

    T t = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(text);
    

    适用于Guid 和大多数其他类型。

    【讨论】:

    • 谨慎使用 ConvertFromInvariantString。如果您的类型是 DateTime 并且您有国际日期格式,那么这将会爆炸。我刚刚根据这个答案找到了一个很难找到的错误。
    • @DPeden 确实,它们必须匹配 - 我在这里的用法是使用不变量,假设序列化数据通常应该采用不变量格式
    • 是的,同意。我仍然赞成您的回答,因为它非常有用。只是为其他人指出这个潜在的问题,因为它让我很伤心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2023-04-06
    相关资源
    最近更新 更多