我可以强制使用'this'关键字

本文关键字:this 关键字 我可以 | 更新日期: 2023-09-27 18:06:12

是否有一种方法可以在引用当前实例成员时强制使用Visual Studio中的this关键字?

构造函数错误示例:

class MyClass
{
    public object Foo { get; set; }
    public MyClass(object foo)
    {
        Foo = Foo; // this should of course be lowercase but it's easy to miss
    }
}

这段代码可能会在稍后的某个地方生成臭名昭著的'object reference not set to an instance of an object'异常。

如何让它工作,但仍然很容易错过:

class MyClass
{
    public object Foo { get; set; }
    public MyClass(object foo)
    {
        Foo = foo; // Valid syntax but unclear.
    }
}

这是有效的语法,但很容易被忽略。

我希望visual studio执行的语法:

class MyClass
{
    public object Foo { get; set; }
    public MyClass(object foo)
    {
        this.Foo = foo; // this is "safe". 
    }
}

如果强制执行这个约定,我将不得不输入this.Foo = this.Foo来创建与第一个示例相同类型的bug。

我总是使用this关键字,因为它使我的生活更容易,而c#和其他语言之间切换,所以不会有任何缺点。

我可以强制使用'this'关键字

您可以通过启用"将警告视为错误"来解决这个问题:

警告2对同一变量赋值;你是想分配别的任务吗?

(CS1717如果你想为这个启用它)

编译器已经告诉你了;您应该检查警告(并以零警告为目标)。

中间那个不清楚:

Foo = foo;

我不同意——这对我来说是非常清楚的(除非你有VB背景,并且已经开发了区分大小写)。

不,你不能像这样改变语言的行为。如果你使用ReSharper I believe,你可以告诉它标记这类事情——它可能不会出现在错误列表中,但会出现在页边空白和整体文件健康的"指示灯"中。

我个人不倾向于在这种事情上失去太多的睡眠,因为它通常是很明显,只要你测试-我只记得一个场景,它真的让我很痛苦,当我结束了堆栈溢出(不完全相同的情况,但又一个大小写问题)在类型初始化器中,运行在Windows Phone 7 -一个复杂的调试环境,基本上。

如果不使用此前缀,则可以使用StyleCop生成警告。您可以按照以下步骤让StyleCop作为构建过程的一部分运行

StyleCop附带了一堆默认规则,其中许多都很糟糕,但你可以编辑你的规则文件,使其对你的开发人员最有意义。您还可以共享StyleCop文件,这样更改将立即复制到所有开发人员。

这是一个相当不错的解决方案,免费,由微软提供,如果你想出一个合适的规则集,那么你的开发人员将创建更"整洁"的代码。您还可以按照"方法不应该太长"这样定义长度来创建自定义规则。有很多东西可以玩。

我猜你也可以将警告设置为错误,但如果你这样做,请确保你的StyleCop设置与你想要的完全一样

您可以使用FXCop'Visual Studio Code Analysis创建自定义警告和错误

您可以使用StyleCopAnalyzers,规则SA1101:

:

对局部类或基类的实例成员的调用不带'this '前缀。',在c#代码文件中。

然后你可以在解决方案资源管理器中右键单击该规则并将其设置为error,现在如果不使用"this",它将不会编译。