c# - 通用 TryParse 扩展方法

标签 c# generics

代码取自 here

我想听听一些专家对这种扩展方法的意见。我确实打算使用它,但想听听我可能会遇到的任何已知问题。

我对原始类型使用 TryParse 方法是否更好?

public static T? TryParse<T>(this object obj) where T : struct
        {
            if (obj == null) return null;

            T? result = null;
            TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
            if (converter != null)
            {
                try
                {
                    string str = obj.ToString();
                    result = (T)converter.ConvertFromString(str);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            return result;
        }

最佳答案

TryParse 模式最好遵循标准模式,它也允许与非结构一起使用:

public static bool TryParse<T>(string s, out T value) {
    TypeConverter converter = TypeDescriptor.GetConverter(typeof(T));
    try {
        value = (T) converter.ConvertFromString(s);
        return true;
    } catch {
        value = default(T);
        return false;
    }
}

请注意,我在这里接受了一个string,因为这是我通常所说的TryParse 的意思;否则,Convert.ChangeType 可能更合适。

我认为没有理由将其作为扩展方法(根据问题示例中的 this),当然不建议污染 object 扩展方法太多。

关于c# - 通用 TryParse 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1654871/

相关文章:

Java 有界类型

c# - 是否可以检查缓存的正则表达式的数量?

c# - 模拟流以读取字节[]

c# - 关于分区程序集和命名空间的策略提示

c# - 参数在 Image.Save 上无效

swift - 具有可选、泛型和可比较性的函数确实满足编译器要求

c# - Action /功能的通用列表

c# - 获取小数的整数和小数部分

java - 具有泛型的 gson 的正确语法

c# - 如何在 C# 中将特定类型的列表转换为泛型类型的列表