有没有办法在c#中的编译时区分非常数字段和常数字段?
我目前正在开发c#代码分析(FxCop)规则,以检查开发人员的代码在命名方面的不一致.
我一直在寻找一种仅针对常量字段的方法.但是在编译时如何声明它们?是否有一个标志(我一直在研究“ HasDefault”,但这并没有给我太多信息).
我正在使用FxCop-API(FxCopSdk.dll& Microsoft.Cci.dll).不使用反射.
总结:如何使用Code Analysis(FxCop)区分非常数字段和常数字段,以及如何定位常数.
解决方法:
进一步研究您提到的FxCop SDK,即字段IsLiteral,它基本上表示在编译时指定值的成员.
这对您有用吗?
例如
public class ClassFieldNamePrefixes : BaseIntrospectionRule
{
public ClassFieldNamePrefixes() :
base("ClassFieldNamePrefixes", "TutorialRules.TutorialRules",
typeof (ClassFieldNamePrefixes).Assembly)
{
}
public override ProblemCollection Check(Member member)
{
if (!(member.DeclaringType is ClassNode))
return this.Problems;
Field fld = member as Field;
if (fld == null)
return this.Problems;
if (fld.IsLiteral &&
fld.IsStatic &&
field.Flags.HasFlag(FieldFlags.HasDefault))
{
....
}
return this.Problems;
}
}