我有以下代码:
var fxRate = new FxRate();
Run Code Online (Sandbox Code Playgroud)
这给了我以下StyleCop ReSharper警告:
变量名'fxRate'以类似匈牙利表示法的前缀开头.
我尝试将Settings.StyleCop文件复制到我的解决方案文件夹并为fx添加一个条目:
<Analyzers>
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
<AnalyzerSettings>
<CollectionProperty Name="Hungarian">
...
<Value>fx</Value>
...
Run Code Online (Sandbox Code Playgroud)
我重新启动了VS,但我仍然得到同样的警告.我在VS2017中使用StyleCop ReSharper扩展.
如何确保"fx"是解决方案中的有效前缀(适用于所有团队成员)?
c# stylecop hungarian-notation visual-studio-2017 resharper-2018
MFC具有以C开头的所有类名.例如,CFile和CGdiObject.有没有人看过它在别处使用过?是否有Microsoft的官方命名约定指南推荐此样式?这个想法是源于MFC还是其他项目?
大多数功能都很容易命名.通常,函数名称基于它的作用或它产生的结果类型.
但是,在生成器函数的情况下,结果可能是某种其他类型的可迭代结果.
def sometype( iterable ):
for x in iterable:
yield some_transformation( x )
Run Code Online (Sandbox Code Playgroud)
该sometype
名称会产生误导,因为该函数不会返回指定类型的对象.它真的是可迭代的sometype
.
像匈牙利表示法一样的名字iter_sometype
或gen_sometype
感觉有点太多.但是,它似乎也澄清了该功能的意图.
更进一步,有一些更专业的案例,前缀可能会有所帮助.这些是典型的例子,其中一些可以在itertools中找到.但是,我们经常要编写一个版本,它具有一些算法复杂性,使其类似于itertools
,但不是完美契合.
def reduce_sometype( iterable ):
summary = sometype()
for x in iterable:
if some_rule(x):
yield summary
summary= sometype()
summary.update( x )
def map_sometype( iterable ):
for x in iterable:
yield some_complex_mapping( x )
def filter_sometype( iterable ):
for x in iterable:
if some_complex_rule(x):
yield x
Run Code Online (Sandbox Code Playgroud)
请问iter_
,map_
, …
我的代码包含一个名为"m_d3dDevice"的变量.
StyleCop抱怨这个名字:
SA1305:变量名称'm_d3dDevice'以类似匈牙利表示法的前缀开头.删除前缀或将其添加到允许的前缀列表中.
(注意我手动禁用了SA1308("m_"),这是我愿意不服从的少数规则之一.)
我不能允许"d3d"作为匈牙利标签中的例外,因为它只允许1或2个字符前缀,并且允许"d3"没有帮助.我已经尝试了我能想到的所有内容,将"d3d"添加到我的CustomDictionary文件中(无论如何,文档暗示CustomDict不用于规则1305).
有什么建议使StyleCop允许这个吗?现在不需要F2我的变量是一件值得骄傲的事.
我现在对WinAPI中用于CHAR字符串和WCHAR字符串的匈牙利表示法前缀感到困惑.当我们使用CHAR字符串时,通常使用这样的前缀:
CHAR szString[] = "Hello";
Run Code Online (Sandbox Code Playgroud)
我们有一个以零结尾的字符串szString所以一切都很好.但是当我们使用WCHAR字符串时,通常使用这样的前缀:
WCHAR pwszString[] = L"Hello";
Run Code Online (Sandbox Code Playgroud)
它代表指向零终止宽字符串的指针...但我们的类型看起来不像这样.指向零终止宽字符串的指针是WCHAR**或PWSTR*.我错了吗?为什么它是CHAR字符串和pwsz的sz而不是WCHAR字符串的wsz?
如果您接管某人的项目进行简单更新,您是否遵循他们的命名惯例?我刚收到一个项目,以前的程序员到处都使用匈牙利表示法.我们的核心产品有一个命名标准,但我们已经有很多人多年来做自定义报告,并做任何他们想做的事情.
我没有时间更改代码中已有的所有变量名称.
为了继续他们的命名惯例,我倾向于可读性.
大多数程序员都知道一种叫做"匈牙利表示法"的东西,每个变量都有一个很好的前缀来表示它的数据类型,即
bIsExciting = false; // Boolean
strName = "Gonzo"; // String
iNumber = 10; // Integer
Run Code Online (Sandbox Code Playgroud)
虽然这种符号形式已经失宠,但我看到(在工作中,互联网等)许多数据类型指标被添加为变量名称的" 后缀 ",即
NameStr = "Gonzo"; // String
NumberInt = 10; // Integer
MyRideBike = new Bike(); // Bicycle
Run Code Online (Sandbox Code Playgroud)
当数据类型后缀为变量名时,是否有这个名称?
编辑:澄清......,这样的东西是否有一个独特的名称?如果没有,一些关于如何称呼它的简明想法肯定会受到赞赏.
我不在.Net中使用匈牙利语(str,int)前缀,但我仍然觉得它在VBA中很有用,在VBA中很难看到类型.
这不好吗?不必要?也许我错过了什么.
我真的很感激任何反馈.我一直在想.
谢谢大家.
我有一个使用的系统匈牙利大多数变量名,这基本上意味着我有很多大的代码库 objQueue
的,objCommon
的,dtDataSet
的等等.
有没有办法转换他们中的大多数?特别是,我想摆脱obj
那些完全没有意义的烦人的,让变量名称看似相似,代码完全不可读.
有一个类似的问题,但它询问是否值得做替换.
像"保持原样"这样的答案对我没有任何用处,因为我肯定我需要这样做.
代码库非常大,我不想逐个重命名变量.我也不想运行查找和替换,因为我会得到错误的命中并进一步搞乱代码.
是否有任何自动化工具可以在Visual Studio中进行此类替换?还有一些针对Resharper的插件,不管怎样?
我们的编程老师教我们使用匈牙利命名法(例如intMyInteger
,strMyString
,...),而编程.
但我听说某个地方实际上并没有在专业领域使用过.这是真的?
编辑:我刚发现这实际上是"Leszynski"