C# 我不应该为此得到编译器警告吗?如何启用它?

C# 我不应该为此得到编译器警告吗?如何启用它?,c#,visual-studio-2010,compiler-warnings,C#,Visual Studio 2010,Compiler Warnings,假设我有这个 public class MyClass { public string myMessage { get; set; } void MyMethod() { string myMessage; } } 我不应该在MyMethod中得到关于myMessage的警报,在类中隐藏myMessage属性吗?当我建造时,我不会得到任何这样的效果。如何激活此支票?签出。MyMethod中的myMessage在新范围中定义。在该方法中对myM

假设我有这个

public class MyClass
{
    public string myMessage { get; set; }

    void MyMethod() 
    {
        string myMessage;
    }
}
我不应该在MyMethod中得到关于myMessage的警报,在类中隐藏myMessage属性吗?当我建造时,我不会得到任何这样的效果。如何激活此支票?

签出。MyMethod中的myMessage在新范围中定义。在该方法中对myMessage的任何引用都将假定您引用的是在该范围中定义的变量。您可以使用this.myMessage访问MyClass中定义的myMessage

编辑: 根据这些信息,您可以从编译器的角度看出为什么这是完全有效的。它是否应该给你一个警告是很有趣的。正如米奇·麦特(Mitch Wheat)在他的评论中指出的那样,像ReSharper这样的工具会警告您这些事情,但是编译器是否应该警告您它处理词法范围的某些事情的冲突是有争议的。似乎更像是一项补充工具的工作。

请查看。MyMethod中的myMessage在新范围中定义。在该方法中对myMessage的任何引用都将假定您引用的是在该范围中定义的变量。您可以使用this.myMessage访问MyClass中定义的myMessage

编辑:
根据这些信息,您可以从编译器的角度看出为什么这是完全有效的。它是否应该给你一个警告是很有趣的。正如米奇·麦特(Mitch Wheat)在他的评论中指出的那样,像ReSharper这样的工具会警告您这些事情,但是编译器是否应该警告您它处理词法范围的某些事情的冲突是有争议的。似乎更像是一个辅助工具的工作。

我知道没有关于这种情况的警告。在MyMethod中,可以使用this.myMessage消除本地属性和类属性之间的歧义


仅供参考,房产通常以所有权为基础,而当地人则以骆驼为基础。使用这种约定可以防止像您列出的那样的命名冲突。

我知道没有关于这种情况的警告。在MyMethod中,可以使用this.myMessage消除本地属性和类属性之间的歧义


仅供参考,房产通常以所有权为基础,而当地人则以骆驼为基础。使用该约定可以防止像您列出的那样的命名冲突。

这实际上与私有字段的一种命名模式一致,尽管我更喜欢_fieldName:

public class MyClass
{
    private string myMessage;

    public MyClass(string myMessage)
    {
        this.myMessage = myMessage;
    }
}

这实际上与私有字段的一种命名模式一致,尽管我自己更喜欢_fieldName:

public class MyClass
{
    private string myMessage;

    public MyClass(string myMessage)
    {
        this.myMessage = myMessage;
    }
}

这里的问题是,我们无法区分一个有效的、期望的隐藏案例和一个意外的隐藏案例。我们尝试在以下情况下保留警告:1代码几乎肯定是错误的,2有一种简单的方法重写代码,以便在实际需要所述代码时消除警告

这通常是理想的情况,因为:

class Frog
{
    private string name;
    public Frog(string name)
    {
        this.name = name;

您不想将字段名更改为其他名称,因为它完全是描述性的。您不希望将参数名称更改为其他名称,因为您希望能够在C4或Visual Basic中创建新的Frogname:Kermit。由于隐藏是需要的,并且代码是正确的,我们不想为隐藏产生警告。

这里的问题是,我们无法区分有效的、需要的隐藏和意外的隐藏。我们尝试在以下情况下保留警告:1代码几乎肯定是错误的,2有一种简单的方法重写代码,以便在实际需要所述代码时消除警告

这通常是理想的情况,因为:

class Frog
{
    private string name;
    public Frog(string name)
    {
        this.name = name;

您不想将字段名更改为其他名称,因为它完全是描述性的。您不希望将参数名称更改为其他名称,因为您希望能够在C4或Visual Basic中创建新的Frogname:Kermit。由于隐藏是需要的,并且代码是正确的,我们不想为隐藏产生警告。

好的一面是,ReSharper警告了这个…@Mitch-Wheat谢谢,我会检查它。好的一面是,ReSharper警告了这个…@Mitch-Wheat谢谢,我会检查它。我正在转换一个旧的asp页面,并尝试将其反全球化。实际上我不希望myMessage的两个版本都可用。我正在转换一个旧的asp页面并尝试将其反全球化。实际上,我并不希望myMessage的两个版本都可用。我知道这是允许的,但感谢您提供了一些好信息。我知道这是允许的,但感谢您提供了一些好信息。