考虑以下方法,
public void Add(Enum key, object value);
由于Enum是一个“特殊类”,我没有意识到你可以用这种方式使用这个类型,但它编译。现在,.NET Framework设计指南对这个结构没什么好说的,所以我很好奇其他人对此的看法。
以下是此方法在内部执行的操作:
public void Add(Enum key, object value)
{
this.dict.Add(key.ToString(), value)
}
您是否希望将参数转换为字符串或转换为int?
考虑以下用例
public enum Names
{
John,
Joe,
Jill,
}
Add(Names.John, 10);
Add(Names.Joe, 11);
以这种方式使用枚举是使用字符串常量的可接受的替代方法(假设域是所有字符串的集合,也是有效的枚举标识符)?
最后一个问题:有没有人知道需要将抽象Enum基类作为参数传递的任何其他真实场景?
答案 0 :(得分:4)
是的,使用Enum
作为参数类型是完全有效的。
答案 1 :(得分:4)
将枚举值用作参数绝对有效。
以这种方式使用枚举是否可以替代使用字符串常量(...)?
是的,实际上这是枚举的主要用途之一。
使用一般的枚举值有点不太明显,因为您通常想知道可以期望的值。枚举值的常见用法是在switch语句中使用它,它有助于了解可以预期的值。枚举值的名称通常不重要,它就是它所代表的。
答案 2 :(得分:2)
最近使用Enum类的一个示例是扩展它以获取指定Enum值的DescriptionAttribute:link。
答案 3 :(得分:1)
是的,它完全有效。但请确保枚举的可见性等于方法的可见性。
换句话说:如果您的方法是公开的,请将枚举公开。否则你将无法调用该方法。
String的Equals方法使用枚举作为比较选项的可选第二个参数:
String s = "Hello";
s.Equals("hello", StringComparison.OrdinalIgnoreCase);
修改强> 重读你的问题后,我理解你在问什么。我个人没有看到传递Enum元素只将其转换为字符串的好处。
我猜你试图容纳几种不同的衍生枚举类型?将枚举存储到字典中还是将参数限制为特定的派生实例会更好吗?
如果允许将任何派生的枚举传递给方法,则无法解决密钥唯一性问题。
答案 4 :(得分:0)
如果您设计工厂模式以生成具有不同用途的不同产品的类,当然还有一个共同的基础。但是所有这些产品都有能够描述其行为或状态的枚举。
您可以使用方法在基类中生成这些产品 喜欢
public class ProductsFactory
{
public static BaseProduct Create( string ProductName, Enum State)
{
....
return new ProductX;
}
}
public class SailBoat: BaseProduct
{
public enum BoatState
{
Sailing,
Docked,
}
}
public class Airplain: BaseProduct
{
public enum AirplainState
{
Flying,
Landing,
TakingOff
}
}
void main
{
ProductFactory.Create("SailBoat", SailBoat.BoatState.Sailing);
ProductFactory.Create("Airplain", Airplain.AirplainState.Flying);
}