我最近创建了一个类,它有一个构造函数,它将3个枚举作为参数。这些枚举在对象本身中定义为下面示例中的ObjectEnum和AnotherObjectEnum。
LongObjectName pt = new LongObjectName(
LongObjectName.ObjectEnum.EnumerationOne,
LongObjectName.ObjectEnum.EnumerationTwo,
LongObjectName.AnotherObjectEnum.EnumerationThree,
0.0);
我必须初始化其中的8个对象,并且我想将其浓缩为更清晰的格式以供将来的编码器使用。我想构造这个代码,以便我可以简化这个对象的声明 - 就像VB.NET中的“with”。我必须实现IDisposable接口才能使用“using”命令。
理想情况下,我希望我的代码看起来像这样:
LongObjectName pt = new LongObjectName(
ObjectEnum.EnumerationOne,
ObjectEnum.EnumerationTwo,
AnotherObjectEnum.EnumerationThree,
0.0);
有没有简单的方法来清理这样的代码? 在此先感谢 - 这是我的第一个问题,所以建设性的批评是值得赞赏的。
答案 0 :(得分:10)
您对using
关键字的两种用法感到困惑。
您可以使用using
directive为任何类型创建别名;这与IDisposable
无关。
例如:
using ObjectEnum = YourNamespace.LongObjectName.ObjectEnum;
(请注意,using
指令中的所有类型都必须使用命名空间名称进行完全限定。
using
statement与名称除外的using
指令无关,用于处置IDisposable
。
例如:
using (TransactionScope.BeginTransaction())
using (dataSet)
using (new SqlCommand("SQL", connection) {
//Do something useful
}
答案 1 :(得分:8)
有一种简单的方法:只是不要在类中声明你的枚举,而是在类的同一名称空间中声明。
顺便说一下, using
对你没有帮助,因为除了在代码中包裹try
/ finally
并在其中调用Dispose()
之外别无其他finally
阻止。它与VB的With
无关。
ETA:由于您选择接受此答案,即使是根据更好的答案:
您可以使用using
指令为您的枚举创建别名:
using ObjectEnum = SomeNameSpace.LongObjectName.ObjectEnum;
请向SLaks投票,而不是我,因为s?他是第一个在这里提出这个想法的人。
答案 2 :(得分:4)
如果您真的需要建设性的批评,请在您的代码上运行FxCop,或者如果您有Visual Studio Team Suite则运行代码分析。
它会为违反最佳做法的代码生成大量警告。对于大型项目,警告可能令人生畏,但如果您一次接近一组,则可以将其减少到更合理的数量。 FxCop非常有用;它在我自己的代码中发现了一些错误,否则会被忽视。
在您的情况下,avoid public nested types。除非有令人信服的理由,否则你不应该把这些枚举放在课堂上。
答案 3 :(得分:2)
答案 4 :(得分:1)
首先,你可以做到这一点:
var pt = new LongObjectName(
ObjectEnum.EnumerationOne,
ObjectEnum.EnumerationTwo,
AnotherObjectEnum.EnumerationThree,
0.0);
其次,您可以考虑将枚举移出类定义,或者在调用者类文件中为枚举创建别名。
using ObjectEnum = LongObjectName.ObjectEnum ;