我有一个同名的方法和一个类。在某种情况下,编译器了解到我在使用类名,但在另一种情况下则没有:
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
}
如果编译器在上下文中了解Foo
中的new Foo
是一个类,为什么它不能理解Foo
中的nameof(Foo.Bar)
也是一个类?如果Foo
是一种方法,则这种表示法没有任何意义。
答案 0 :(得分:7)
在第一种情况下,编译器由于new
关键字而知道您的意思是该类。 new
之后的必须是类型名称。
在第二种情况下,没有这样的限制:Foo
可以是任何变量,成员,字段或类型。 (请注意,如果这完全可行,则Bar
必须是类static
的{{1}}属性)。
但是,由于方法Foo
位于最近作用域中,因此编译器认为您的意思是这个方法组,它没有名为Foo
的成员。