给定一个类和命名空间,定义如下;

namespace Models
{
    public class Foo
    {
    }
}


还有以下...

namespace Factories
{
    using Models;

    class FooFactory
    {
        public Foo GetFoo()
        {
            return new Foo();
        }
    }
}


最后...

namespace InferenceTest
{
    using Factories;

    class Program
    {
        static void Main()
        {
            Foo foo = new FooFactory().GetFoo();
        }
    }
}


如您所料,此代码无法编译,并显示错误“找不到类型或名称空间名称'Foo'(您是否缺少using指令或程序集引用?)”

但是,如果我将行更改为此...

var foo = new FooFactory().GetFoo();


然后,它将编译并运行正常。

为什么会有这种差异?关于类型推断的意义是什么,它使它能够查看尚未导入的名称空间中的类型。命名空间只是语法糖吗?

最佳答案

var foo = new FooFactory().GetFoo();编译的原因很简单。编译器推断foo是Models.Foo类型,而不仅仅是Foo。
表示按下Models.Foo foo2 = new FooFactory().GetFoo();
请注意,Foo foo2 = new FooFactory().GetFoo();是不同的。

08-06 19:24