【发布时间】:2016-03-30 23:10:30
【问题描述】:
我使用以下两种扩展方法将传入的字符串转换为我需要的字符串。它们用于已转换为字符串但原始类型始终已知的数据。
public static int ToInt(this string self)
{
try { return Convert.ToInt32(self); }
catch { return default(int); }
}
public static double ToInt(this string self)
{
try { return Convert.ToDouble(self); }
catch { return default(double); }
}
我刚刚了解到信息流将被扩展并包含其他类型。从长远来看,为每个方法添加一个新的扩展方法肯定会导致精神错乱,更不用说代码冗余了。所以我试图让它更通用。
public static T ToType<T>(this string self)
{
if (typeof(T) == typeof(int))
try { return Convert.ToInt32(self); }
catch { return default(int); }
}
但是,编译器对此有问题(当然是关于类型)。我尝试在第一次返回中进行强制转换,并在第二次中使用提供的类型,但问题仍然存在。
public static T ToType<T>(this string self)
{
if (typeof(T) == typeof(int))
try { return (T)Convert.ToInt32(self); }
catch { return default(T); }
}
完全可以做到吗,还是我最终会创建许多类似的扩展方法?请记住,由于我将始终知道所提供的类型,因此我只需要介绍这些类型,以防无法实现完全通用且类型安全的方法,或者非常麻烦。
另外,请注意我昨天做了手术,我还有点休息,所以答案可能很简单。
【问题讨论】:
标签: c# generics type-conversion