在C#中使用@关键字——坏主意?

在C#中使用@关键字——坏主意?,c#,.net,naming-conventions,keyword,C#,.net,Naming Conventions,Keyword,在我的命名约定中,我对私有成员变量使用_name。我注意到,如果我用ReSharper自动生成一个构造函数,如果成员是关键字,它将生成一个转义关键字。例如: class IntrinsicFunctionCall { private Parameter[] _params; public IntrinsicFunctionCall(Parameter[] @params) { _params = @params; } } 这通常被认为是不好的做法

在我的命名约定中,我对私有成员变量使用_name。我注意到,如果我用ReSharper自动生成一个构造函数,如果成员是关键字,它将生成一个转义关键字。例如:

class IntrinsicFunctionCall
{
    private Parameter[] _params;
    public IntrinsicFunctionCall(Parameter[] @params)
    {
        _params = @params;
    }
}
这通常被认为是不好的做法还是可以的?它在@params和@interface中经常发生


编辑:这实际上并没有给变量名添加前缀。如果从另一种.NET语言(即F#)访问该变量,它将只是
params
。事实上,在C#中,如果你写
@x
,它完全等同于
x

一般来说并不坏。如果您更喜欢为某些类型的变量使用前缀,这是可以的。据我所知,微软建议不要使用前缀,除了接口名称上的I。

使用语言关键字作为标识符会影响可读性。诚然,正确的语法HighLightning会有所帮助,但最好不要只依赖编辑器功能

考虑下面的代码(显然是夸张的不可读:-):

接口接口接口工厂
{
T CreateInstance(params对象[]@params);
}
上课
{
IMyOtherInterface\u接口;
公共IMyOtherInterface接口
{
获取{return\u interface;}
}
公共SomeClass(params对象[]@params)
{
SomeInterface interfaceFactory=新的SomeInterface();
IMyOtherInterface@interface=interfaceFactory.CreateInstance(@params);
如果(@interface->IsValid())
{
_接口=@接口;
}
其他的
{
_interface=interfaceFactory.CreateInstance();
}
}
}

这取决于您的个人品味,但是您需要保持所有代码的风格一致

这是代码一致性的示例,使用相同的样式

int @number;
string @name;

这可能会考虑一个坏代码,使用混合样式。

int @number;
string _name;

我会把语言关键词放在一边(只是为了安全和减少混淆)。让任何人都更容易阅读我的代码。。他们不必去看@在参数名前面加前缀时做了什么。它在上面的代码块中有点突出。。可能是突出显示。将变量重命名为
参数
,并在使用时指定接口,而不仅仅是
接口
@实际上不添加前缀。如果你有一个变量@number,那么“number”就是指同一个变量。我知道你指的是@Robert,但我的答案是集中在编码风格和源代码的可读性上。:)
int @number;
string _name;