给定一个构造函数
public MyObject(int id){
ID = id;
}
Run Code Online (Sandbox Code Playgroud)
两个枚举:
public enum MyEnum1{
Something = 1,
Anotherthing = 2
}
public enum MyEnum2{
Dodo = 1,
Moustache= 2
}
Run Code Online (Sandbox Code Playgroud)
是否可以传入通用枚举作为构造函数的参数?我正在寻找一个解决方案:
public MyObject(enum someEnum){
ID = (int)someEnum;
}
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
var newObject = new MyObject(MyEnum1.Something);
var anotherObject = new MyObject(MyEnum2.Dodo);
Run Code Online (Sandbox Code Playgroud)
为什么要传递枚举,而又可以传递整数?
var newObject = new MyObject((int)MyEnum1.Something);
var anotherObject = new MyObject((int)MyEnum2.Dodo);
Run Code Online (Sandbox Code Playgroud)
并使用您的第一个构造函数:
public MyObject(int id){
ID = id;
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是:
public MyObject(Enum someEnum){
ID = Convert.ToInt32(someEnum);
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以按照自己的要求使用它,而无需int每次调用contstructors时都使用它:
var newObject = new MyObject(MyEnum1.Something);
var anotherObject = new MyObject(MyEnum2.Dodo);
Run Code Online (Sandbox Code Playgroud)
只需使用通用构造函数:
class MyObject<T> {
public MyObject(T someEnum) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("Not an enum");
ID = Convert.ToInt32(someEnum);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以像这样轻松调用它:
var m = new MyObject<MyEnum>(MyEnum1.Something);
Run Code Online (Sandbox Code Playgroud)
但更容易将枚举作为整数传递给构造函数,如其他答案中所述.
| 归档时间: |
|
| 查看次数: |
9115 次 |
| 最近记录: |