如果线程的标题是准确的,我并不肯定。
我有一类不同的枚举:
public class Enums
{
public enum StringActions
{
FIRSTNAME,
MIDDLEINITIAL,
LASTNAME
}
public enum IntegerAction
{
RANGE,
RANDOM
}
}
我有一个构造函数的对象,我想接受一个通用的 Enums 参数,它能够接受 StringAction 或 IntegerAction。我有字典(每个枚举类型一个),将这些枚举作为键,将委托作为值。我想使用传入的枚举来查找该枚举的正确委托,然后对其进行一些处理。
public class DataPoint
{
public DataPoint(Enum mAction)
{
if (mAction == Enums.StringAction)
{
var act = StringActionDictionary[mAction];
}
else if (mAction == Enums.IntegerAction)
{
var act = IntegerActionDictionary[mAction];
}
...
}
}
使用此实现,我需要将“mAction”转换为正确的类型,但如何在运行时完成?反射在这里是一种选择,还是有另一种方式?
只提供两个构造函数会更有意义,每个构造函数采用不同的enum
. 这将使您的代码更有意,更易于消费者理解:
public class DataPoint
{
public DataPoint(Enums.StringAction mAction)
{
DoSomeWorkWithStringAction(mAction);
}
public DataPoint(Enums.IntegerAction mAction)
{
DoSomeWorkWithIntegerAction(mAction);
}
// Rest of class omitted
但是,如果您确实想提供通用实现,则可以使用is
关键字检查Enum
传入的类型,然后将其转换为if
块内的适当类型,以便您可以使用它。只要认识到这个构造函数将接受任何旧的 Enum,包括那些你没有条件的。
例如:
public class DataPoint
{
public DataPoint(Enum mAction)
{
if (mAction is Enums.StringAction)
{
DoSomeWorkWithStringAction((Enums.StringAction)mAction);
}
else if (mAction is Enums.IntegerAction)
{
DoSomeWorkWithIntegerAction((Enums.IntegerAction)mAction);
}
}
private void DoSomeWorkWithIntegerAction(Enums.IntegerAction actionToTake)
{
Console.WriteLine($"Enum was an IntegerAction, with action: {actionToTake}");
}
private void DoSomeWorkWithStringAction(Enums.StringAction actionToTake)
{
Console.WriteLine($"Enum was a StringAction, with action: {actionToTake}");
}
}
在任何一种情况下,类的实例化看起来都一样:
static void Main()
{
var intDp = new DataPoint(Enums.IntegerAction.RANGE);
var strDp = new DataPoint(Enums.StringAction.FIRSTNAME);
Console.Write("\nDone!\nPress any key to exit...");
Console.ReadKey();
}
输出也是如此:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句