2

此示例给出“找不到类型或命名空间名称‘MyType’(您是否缺少 using 指令或程序集引用?)”

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

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

4

2 回答 2

1

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

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

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

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

于 2012-05-05T22:37:45.313 回答
0

假设您正在谈论 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.
        }
    }
}

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

于 2012-05-05T22:33:16.223 回答