C#:全局别名通用类名?

问题描述 投票:0回答:3

在某些项目中我们使用泛型,我们得到很多这样的行:

Line<SomeTClass,SomeCClass> myLine =
           (Line<SomeTClass,SomeCClass>)LineFactory.CreateLine(...)

我们可以声明本地别名,使用

using X = Line<SomeTClass,SomeCClass>

然后我们可以写,

X myLine = (X)LineFactory.CreateLine(...)

我们有很多

<T,C>
的组合,但我们经常使用相同的。是否可以全局声明 using,这样我们就不必在每个文件中声明别名?

c# alias
3个回答
5
投票

没有全局别名之类的东西。您可以做的是使用类型推断来简化您的声明:

var myLine = (Line<SomeTClass, SomeCClass>)LineFactory.CreateLine(...);

如果这对于推理系统来说不够具体,您可以使 CreateLine() 方法通用以强制执行它:

var myLine = LineFactory.CreateLine<Line<SomeTClass, SomeCClass>>(...);

并给出 LineFactory 类型的名称,甚至可以进一步简化它:

var myLine = LineFactory.CreateLine<SomeTClass, SomeCClass>(...);

最后一个选项对我来说感觉“正确”,但在某种程度上我无法完全清楚地表达出来。以防万一您需要一些帮助,方法声明将如下所示:

public static class LineFactory 
{
    public static Line<T,C> CreateLine<T,C>(...) { ... }
}

5
投票

不,您无法创建全局别名。


0
投票

这可以通过添加文件来实现,例如带有以下声明的

GlobalUsings.cs

global using X = Full.Namespace.Line<SomeTClass,SomeCClass>;

如果更有意义,您还可以将其添加到项目中现有文件的顶部。

© www.soinside.com 2019 - 2024. All rights reserved.