首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的通用输入参数?

C#中的通用输入参数?
EN

Stack Overflow用户
提问于 2014-09-25 16:49:06
回答 2查看 240关注 0票数 1

我正在尝试实现一个泛型函数,假设我们有模式&它是对应的子模式

现在我所做的就是创建了一个模式的Enum

代码语言:javascript
复制
public enum Modes
{
    ModeA,
    ModeB,
    ModeC
}

同样,对于SubModes来说,

代码语言:javascript
复制
public enum SubModesA
{
    SubModeA1,
    SubModeA2,
    SubModeA3
}

public enum SubModesB
{
    SubModeB1,
    SubModeB2
}

public enum SubModesC
{
    SubModeC1,
    SubModeC2,
    SubModeC3
}

现在我的问题是,如何实现一个将Mode作为一个输入,Sub Modes作为第二个输入的方法(可以是泛型的),请注意,第二个输入(子模式)必须基于第一个输入,

(例如Public void PerformOperation(Modes mode, SubModes subMode){};

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-25 16:59:13

对于您的模式,您将无法使用enum来获得此行为。您将需要使用一种机制,该机制涉及对每种模式都有不同的类型,以便每个模式可以映射到方法的不同重载。您可以使用这样的类来完成这一任务:

代码语言:javascript
复制
public class Mode
{
    public static readonly ModeA ModeA = new ModeA();
    public static readonly ModeB ModeA = new ModeB();
    public static readonly ModeC ModeA = new ModeC();
    public class ModeA { }
    public class ModeB { }
    public class ModeC { }
}

现在您可以编写这样的方法:

代码语言:javascript
复制
public static void PerformOperation(Mode.ModeA mode, SubModesA subMode)
{

}

您可以为每种类型的模式创建方法,每种模式都具有适当的子模式。这意味着调用者现在可以写:

代码语言:javascript
复制
PerformOperation(Mode.ModeA, 

第二个参数的唯一有效值是适当子模式的实例。

票数 3
EN

Stack Overflow用户

发布于 2014-09-25 16:51:45

根据您当前的结构,这是不可能的。泛型类型约束在允许您进行约束方面非常有限。实际上,您可以限制类(new),并强制从类或接口派生。

如果您使枚举对象和从ModeA派生的各种SubModesA,以及从Mode派生的ModeA,则可以这样做:

代码语言:javascript
复制
public class MyGenericClass<T,U> where T : Mode
                                 where U : T

为了处理这种情况,您可能需要考虑许多其他模式(模板方法、策略)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26043950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档