我经常看到(例如在许多模拟库中)方法,其中使用泛型类型参数来代替类型的参数System.Type.我特别谈到泛型类型仅在typeof(T)操作中使用的情况(即,在方法中的任何地方都没有使用类型T的实例,并且T不用于返回类型或其他参数).
例如,考虑以下方法:
public string GetTypeName(System.Type type) { return type.FullName; }
Run Code Online (Sandbox Code Playgroud)
这种方法通常伴随着通用版本:
public string GetTypeName<T>() { return GetTypeName(typeof(T)); }
Run Code Online (Sandbox Code Playgroud)
问题
是一种不好的做法还是一种好的做法?
这是一种语法糖还是还有更多呢?
我认为这是滥用语言功能来缩写对接受类型参数的方法的调用 System.Type
你觉得这有气味吗?这应该避免吗?或者这实际上是一种很好的做法(提供通用方法作为避免键入的快捷方式typeof()).
以下是使用我能想到的这种模式的一些实际问题:
另一方面,这是一种常见的做法(大多数总是正确的,对吧?)但更重要的是,当我对需要在编译时知道System.Type类型的单个参数的代码进行Extract Method重构时,ReSharper更喜欢该签名(和我学会了接受他们的建议,虽然不是出于信仰,但认真地).
处理类型的方法通常只做以下事情:处理类型。
IMO,Class.Method<SomeType>();比Class.Method(typeof(SomeType));
但我想这是一个观点问题。
以 LINQ.OfType<T>()为例:
personlist.OfType<Employee>().Where(x => x.EmployeeStatus == "Active");
Run Code Online (Sandbox Code Playgroud)
相对:
personlist.OfType(typeof(Employee)).Where(x => ((Employee)x).EmployeeStatus == "Active");
Run Code Online (Sandbox Code Playgroud)
您更喜欢哪一个?
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |