【发布时间】:2019-07-14 02:13:42
【问题描述】:
我正在尝试理解泛型,当我在Generics 上观看 SCOTT ALLEN 的 1 个复数视频时,他展示了丑陋代码与好代码的示例 代码,但我不明白我想在下面提到的东西:
public enum Steps
{
Step1,
Step2,
Step3
}
丑陋代码示例:
Steps value = (Steps)Enum.Parse(typeof(Steps),input);
良好的代码和强类型:
public static class StringExtensions
{
public static TEnum ParseEnum<TEnum>(this string value)
{
return (TEnum)Enum.Parse(typeof(TEnum),value);
}
}
var input = "Step1";
var value = input.ParseEnum<Steps>();
console.writeline(value);
但是在这里我不明白为什么第二个代码很好,因为它也在进行强制转换,并且似乎代码 1 和 2 是相同的,或者我可能没有正确理解为什么第二个代码更好,因为它正在执行相同类型的强制转换。
有人可以解释一下第二个代码是如何强类型的,并且按照作者的说法更好,尽管它与第一个代码 sn-p 进行相同的转换吗?
【问题讨论】:
-
对我来说,扩展似乎更丑陋,因为它意味着你可以将 every 字符串解析为一个你当然不能的枚举。话虽如此,您的问题完全是基于意见的。你应该问作者他有什么更好的代码。
-
扩展的另一个问题是您可以将任何类型作为泛型类型传递,并且代码将编译,但会在运行时抛出。 (例如
input.ParseEnum<SomeClass>()会抛出)