我知道我可以将我的枚举放在类的Namespace区域,这样每个人都可以在同一名称空间中访问它。
// defined in class2
public enum Mode { Selected, New, }
我想要的是从
访问此枚举public class1
{
var class2 = new class2();
// Set the Mode
class2.Mode = Model.Selected
}
在不使用命名空间区域的情况下,这是否可行?
答案 0 :(得分:18)
您可以在类之外声明枚举:
namespace MyNamespace
{
public enum MyEnum
{
Entry1,
Entry2,
}
}
然后您可以在需要使用的地方添加using MyNamespace;
。
答案 1 :(得分:6)
Aaron的回答非常好,但我相信还有更好的方法:
public static class class1
{
public void Run()
{
class2.Mode mode = class2.Mode.Selected;
if (mode == class2.Mode.Selected)
{
// Do something crazy here...
}
}
}
public static class class2
{
public enum Mode
{
Selected,
New
}
}
没有必要使这一点复杂化。这是一项简单的任务。
所有最好的
克里斯。
答案 2 :(得分:5)
是:
class2.Mode = class2.Mode.Selected
但请注意,您不能定义与外部类成员之一具有相同名称的嵌套类型,因此此代码将无法编译。枚举或属性需要以其他名称命名。您的类名和变量名也会发生冲突,使其更加复杂。
如果你有这个问题,为了使这个更通用的答案:
public class Foo
{
public SomeEnum SomeProperty { get; set; }
public enum SomeEnum {
Hello, World
}
}
然后,此代码将为属性分配枚举值:
Foo foo = new Foo();
foo.SomeProperty = Foo.SomeEnum.Hello;
答案 3 :(得分:5)
如果您尝试执行下面描述的操作,则无效...
public class MyClass1
{
private enum Mode { New, Selected };
public Mode ModeProperty { get; set; }
}
public class MyClass2
{
public MyClass2()
{
var myClass1 = new MyClass1();
//this will not work due to protection level
myClass1.ModeProperty = MyClass1.Mode.
}
}
你可以做的是下面的,这将有效...
public interface IEnums
{
public enum Mode { New, Selected };
}
public class MyClass1
{
public IEnums.Mode ModeProperty { get; set; }
}
public class MyClass2
{
public MyClass2()
{
var myClass1 = new MyClass1();
//this will work
myClass1.ModeProperty = IEnums.Mode.New;
}
}
答案 4 :(得分:1)
我最终通过将其更改为使用Intellisense找到的名称空间访问器解决了我的问题。我以为枚举是在类中,而不仅仅是名称空间。如果在课堂上,我建议将其移出课堂。
namespace ABC.XYZ.Contracts
{
public class ChangeOrder : BaseEntity, IAuditable
{
...
}
public enum ContractorSignatureType
{
A,
B,
V
}
}
ContractorSignatureType = Contracts.ContractorSignatureType.B,
答案 5 :(得分:0)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @enum
{
class temp
{
public enum names
{
mohitt,
keval,
Harshal,
nikk
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine((int)temp.names.nikk);
Console.ReadKey();
}
}
}
答案 6 :(得分:0)
//by using this you can access the value of enum.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace @enum
{
class temp
{
public enum names
{
mohitt,
keval,
Harshal,
nikk
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(temp.names.nikk);
Console.ReadKey();
}
}
}