【问题标题】:In C#, is there a way to define a type synonym?在 C# 中,有没有办法定义类型同义词?
【发布时间】:2019-02-02 00:55:23
【问题描述】:

在我的 C# 项目中,我需要一个长联合类型的表单:

System.Tuple<..., ..., ...>

其中... 是名称足够长的组件,以使整个元组类型声明延伸到整行的宽度。

C# 是否支持一种简写方式?

我在想像 Haskell 的 type synonyms 这样的东西,在那里我可以声明一个短类型名称来代替长类型名称,就像我可以声明一个新变量一样容易。

我尝试使用var,但由于我需要将参数的类型声明为delegate,我收到错误消息“上下文关键字'var'可能只出现在局部变量声明或脚本中模式”;看来仅使用var 不适用于我的情况。

【问题讨论】:

  • 良好语言设计的标志不是要放入什么,而是要故意遗漏什么。 C# 是一种设计良好的语言。您已经使 Tuple 超出了合理范围,许多类型参数仅适用于自动生成的代码。声明一个类或结构,这样你就有了好的属性/字段名称。

标签: c# types type-alias type-synonyms


【解决方案1】:

有:

using MyAlias = MyLongType

它被称为使用别名指令。它也适用于命名空间。更多信息here

但这仅适用于 1 个文件。 您要么需要将其写入将要使用的每个文件中,要么使用解决方法:

从具有长类型的类继承,并且不对功能添加任何内容。

示例:

class  MyAlias: MyLongType{}

【讨论】:

    【解决方案2】:

    直接来自文档

    using directive (C# Reference)

    为命名空间或类型创建别名。这称为使用 别名指令。

    using Project = PC.MyCompany.Project;

    例如

    using ShortTypeName = My.Very.Silly.Long.TypeName.That.is.VerySuspiciousAndProbablyShouldBeRefactoredAnyway;`
    using ShortOtherTypeName = My.Very.Silly.Long.TypeName.That.is.VeryOtherSuspiciousAndProbablyShouldBeRefactoredAnyway;`
    
    internal class Program
    {
        private (ShortTypeName , ShortOtherTypeName ) _myLovelyTuple;
    

    【讨论】:

    • 既然可以直接声明元组,为什么还要同时声明这两种类型呢?如果类型本身很短,这是没用的
    • @CamiloTerevinto 确实可以:)
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2019-10-06
    相关资源
    最近更新 更多