gpt4 book ai didi

c# - 为什么编译器找不到正确的类型?

转载 作者:行者123 更新时间:2023-11-30 14:05:56 24 4
gpt4 key购买 nike

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

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
}

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

最佳答案

在第一种情况下,编译器知道你指的是类,因为 new 关键字。 new 之后的必须是类型名称。

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

但由于方法 Foo最近的作用域 中,编译器认为您指的是这个方法组,它没有名为 Bar 的成员.

关于c# - 为什么编译器找不到正确的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51761662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com