3

我有一个同名的方法和一个类。在一种情况下,编译器知道我正在使用类名,但在另一种情况下则不然:

using System;
using DTO;

namespace DTO
{
    public class Foo
    {
        public string Bar { get; set; }
    }
}

namespace Tests
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }


        private void Foo()
        {
            var foo = new Foo // Ok
            {
                Bar = nameof(Foo.Bar) // Not ok
            };
        }
    }
}

错误:

CS0119 'Program.Foo()' is a method, which is not valid in the given context

我得到与静态属性相同的错误:

public class Foo
{
    public static string Bar = "Hello";
}

// ...

private void Foo()
{
    var bar = Foo.Bar; // Error
}

如果编译器在上下文中理解Fooinnew Foo是一个类,为什么它不能理解Fooinnameof(Foo.Bar)也是一个类?Foo如果是一种方法,则此表示法毫无意义。

4

1 回答 1

7

在第一种情况下,由于new关键字,编译器知道您的意思是类。接下来new 必须是类型名称。

在第二种情况下,没有这样的限制:Foo可以是任何变量、成员、字段或类型。(请注意,如果这应该起作用,则Bar需要是staticclass 的属性Foo)。

但是由于该方法Foo最接近的范围内,编译器认为您的意思是这个方法组,它没有被调用的成员Bar

于 2018-08-09T08:02:47.933 回答