我可以强制使用'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#和其他语言之间切换,所以不会有任何缺点。
您可以通过启用"将警告视为错误"来解决这个问题:
警告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",它将不会编译。