接受“通用”枚举作为参数,然后在运行时转换为 diff 枚举类型的方法

语言凯龙

如果线程的标题是准确的,我并不肯定。

我有一类不同的枚举:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在运行时将对象转换为通用类型

来自分类Dev

在运行时将对象转换为通用类型

来自分类Dev

从枚举类型'NSTextAlignment'aka'枚举NSTextAlignment'到diff的隐式转换。枚举类型'UITextAlignment'aka'枚举UITextAlignment'

来自分类Dev

枚举方法的通用返回类型

来自分类Dev

枚举方法的通用返回类型

来自分类Dev

当枚举类型仅在运行时已知时,如何枚举枚举?

来自分类Dev

将作为通用类型参数的运行时Dictionary <K,V>强制转换为其正确的编译时类型

来自分类Dev

在运行时将对象数组转换为T类型的通用数组typeof

来自分类Dev

通用枚举类型扩展方法的随机枚举值

来自分类Dev

在枚举类型上调用通用方法

来自分类Dev

在运行时枚举UISupportedExternalAccessoryProtocols

来自分类Dev

在运行时将JObject转换为类型

来自分类Dev

如何在运行时获取TypeScript枚举类型的名称?

来自分类Dev

使用枚举作为类型参数

来自分类Dev

通用枚举类型防护

来自分类Dev

在运行时转换类型数组

来自分类Dev

在运行时Ax 2012上隐藏枚举元素

来自分类Dev

在运行时将后缀添加到枚举

来自分类Dev

C#在运行时切换枚举

来自分类Dev

在运行时Ax 2012上隐藏枚举元素

来自分类Dev

如何将自己的枚举类型转换为通用枚举类型?

来自分类Dev

枚举参数类型的简写

来自分类Dev

将数组强制转换为字符串枚举器时发生运行时错误

来自分类Dev

枚举作为打字稿中的通用类型

来自分类Dev

从枚举器获取枚举类型

来自分类Dev

枚举引发“不是枚举类型”

来自分类Dev

枚举引发“不是枚举类型”

来自分类Dev

调用通用方法并在运行时设置通用类型

来自分类Dev

在运行时检测使用“动态”关键字作为类型参数

Related 相关文章

热门标签

归档