【问题标题】:C#: Globally alias a generic class name?C#:全局别名泛型类名?
【发布时间】:2011-09-28 02:29:37
【问题描述】:

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

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

我们可以声明本地别名,使用using X = Line&lt;SomeTClass,SomeCClass&gt;

然后我们可以写,X myLine = (X)LineFactory.CreateLine(...)

我们有很多&lt;T,C&gt; 的组合,但我们经常使用相同的。是否可以全局 de 声明 using,这样我们就不必在每个文件中声明别名?

【问题讨论】:

  • varLineFactory.CreateLine(..) 的组合返回正确的类型也可以 - 为什么必须强制转换?

标签: c# alias


【解决方案1】:

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

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>(...) { ... }
}

【讨论】:

  • @FrancoisB.:如果你进行投射,不排除使用var
  • @Francois - var 永远不会阻止您访问特定属性。
【解决方案2】:

不,您不能创建全局别名。

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多