使用 Directive 在 C 语言中声明伪类型#

Using Directive to declare a pseudo-type in C#

提问人:psubsee2003 提问时间:12/9/2011 更新时间:12/9/2011 访问量:393

问:

我继承了一些我刚刚开始挖掘的源代码,我发现以前的所有者已经将该指令用作 的别名,但我以前从未见过这种特定方法。usingList<T>

namespace MyNamespace
{
    using pType1 = List<type1>;
    using pType2 = List<List<type1>>;

     // classes here
}

这两个元素在代码中被大量使用,并且也是代码中几个关键方法的返回类型。我明白他想用一个简单的名字来完成什么,而不是一遍又一遍地重复。我正在争论是否要创建一个真正的类型来替换 using 语句,但在我花时间之前,我想知道保留当前实现是否有任何优点/缺点。List<type1>List<List<type1>>

使用 using 指令 C# -4.0

评论

3赞 Darin Dimitrov 12/9/2011
确实很少见到这些用法。在代码库中,作者通常试图掩盖他们对泛型有用的缺乏理解。我见过这样的事情:-)即使你给这只野兽起个名字,它仍然是一只野兽。List<Dictionary<List<type1>, IEnumerable<Foo>>>

答:

1赞 Matten 12/9/2011 #1

如果该构造像您所说的那样被大量使用,我肯定会将其替换为实际类型(显式写出 List 或创建一个新类型)。如果有人碰巧更改了其中一个类型声明,例如

using pType1 = List<type2WhichType1InheritsFrom>;

因为(s)他认为基本版本在不查看所有使用它的地方的情况下做得更好,所以可能会有一些不必要的副作用。

评论

0赞 Daniel Elliott 12/9/2011
在实践中同意你的看法,但从理论上讲,如果遵守李斯科夫的替代,它应该不会引起问题
0赞 Matten 12/9/2011
随着作者的更换,有关特定实现细节的知识消失了。话虽如此,我总是试图让我的代码尽可能易于维护。我们有一些项目,原作者离开了公司,给了我们一些非常有趣的代码结构,只是为了确保修改一行会破坏整个应用程序......我讨厌实践与理论:-)
0赞 phoog 12/9/2011
@DanielElliott这不是朝着另一个方向发展吗?如果我有一个 List<object>,如果列表中没有将非字符串对象添加到列表中的位置>我只能将其更改为 List<string。
3赞 Jon 12/9/2011 #2

通常,如果数据结构表示应用程序域模型中的某个实体,则它应该有自己的类型;它使代码更加清晰易懂。另一方面,如果你只需要一个用于中间数据处理,那么为它制作一个合适的类型并没有真正的好处。List<List<string>>

在你的例子中,由于原始开发人员不厌其烦地为类型制作别名,因此它会被大量使用是合乎逻辑的,这指向“代表实体”的场景。如果是这样,一定要继续为结构创建一个新类型(可能比裸列表更合适,通常是根据接口而不是具体类定义的东西,但这取决于你在那里实际建模的内容)。

评论

0赞 psubsee2003 12/10/2011
谢谢乔恩...你的回答是我是保持当前结构的“最佳”骗局。我将实现我自己的类型。谢谢大家