如何在不使用关键字的情况下使用枚举实例化对象时编写更干净的代码?

Cri*_*onX 1 c# enums namespaces

我最近创建了一个类,它有一个构造函数,它将3个枚举作为参数.这些枚举在对象本身中定义为下面示例中的ObjectEnum和AnotherObjectEnum.

LongObjectName pt = new LongObjectName(
            LongObjectName.ObjectEnum.EnumerationOne,
            LongObjectName.ObjectEnum.EnumerationTwo,
            LongObjectName.AnotherObjectEnum.EnumerationThree,
            0.0);
Run Code Online (Sandbox Code Playgroud)

我必须初始化其中的8个对象,我想将其浓缩为更清晰的格式,供将来的编码人员使用.我想构造这个代码,以便我可以简化这个对象的声明 - 就像VB.NET中的"with".我必须实现IDisposable接口才能使用"using"命令.

理想情况下,我希望我的代码看起来像这样:

LongObjectName pt = new LongObjectName( 
                ObjectEnum.EnumerationOne,
                ObjectEnum.EnumerationTwo,
                AnotherObjectEnum.EnumerationThree,
                0.0);
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法来清理这样的代码?在此先感谢 - 这是我的第一个问题,所以建设性的批评是值得赞赏的.

SLa*_*aks 10

您混淆了using关键字的两种用法.

您可以使用该using指令为任何类型创建别名; 这与此无关IDisposable.

例如:

using ObjectEnum = YourNamespace.LongObjectName.ObjectEnum;
Run Code Online (Sandbox Code Playgroud)

(请注意,using指令中的所有类型都必须使用命名空间名称进行完全限定.


除了名称之外,该using语句using指令无关,用于处理IDisposable.

例如:

using (TransactionScope.BeginTransaction())
using (dataSet)
using (new SqlCommand("SQL", connection) {
    //Do something useful
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*oey 8

有一种简单的方法:只是不要在类中声明您的枚举,而是在类的相同名称空间中声明.

using不会帮助你在这里,顺便说一句,因为这没有别的比保鲜膜try/ finally在你的代码和调用Dispose()finally块.这绝不是类似于VB的With.

ETA:既然你选择接受这个答案,即使是更好的答案:

可以使用该using 指令为枚举创建别名:

using ObjectEnum = SomeNameSpace.LongObjectName.ObjectEnum;
Run Code Online (Sandbox Code Playgroud)

请给SLaks而不是我,因为s?他是第一个在这里提出这个想法的人.