是否可以在 C# 中使用别名指令声明递归

本文关键字:别名 指令 声明 递归 是否 | 更新日期: 2023-09-27 18:33:15

此示例给出"找不到类型或命名空间名称'MyType'(是否缺少 using 指令或程序集引用?

using MyType = System.Func<System.Int32, System.Tuple<System.Int32, MyType>>;

是否可以声明这样的递归类型?

是否可以在 C# 中使用别名指令声明递归

不,我认为这是不可能的。using语句的右侧需要解析为实际类型,然后才能为其分配别名。在您的情况下,为了解决右侧问题,编译器必须完全定义 allias...这需要它解决右侧。这个递归问题没有尽头,所以编译器显然不会打扰。

为了使这里的问题更清楚:让我们假设编译器设法编译了您的别名,我做到了:

MyType mytype = x => Tuple<int, MyType>.Create(x, ???);

我可以在函数的主体中放入什么来定义返回值?最终,我需要在某个地方有一个可构造的类型来返回。

假设您正在谈论一个 using 指令(在文件顶部)并且 MyType 存在,是的,这是可能的。 例如,这是完全合法的:

using System;
using String = System.Func<System.String>;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            String myString = () => "Foo";
            // myString is now a function returning the string "Foo".  Yikes.
        }
    }
}

也就是说,它永远不会通过我的代码审查。 谈论混乱。