相关疑难解决方法(0)

C#中的歧视联盟

[注意:这个问题的原始标题是" C#中的C(ish)风格联盟 ",但正如杰夫的评论告诉我的那样,显然这种结构被称为"歧视联盟"]

请原谅这个问题的冗长.

我们已经在SO中提出了几个类似的声音问题,但他们似乎专注于联盟的内存节约优势或将其用于互操作. 这是一个这样的问题的例子.

我希望有一个联合类型的东西有点不同.

我现在正在编写一些代码来生成看起来有点像这样的对象

public class ValueWrapper
{
    public DateTime ValueCreationDate;
    // ... other meta data about the value

    public object ValueA;
    public object ValueB;
}
Run Code Online (Sandbox Code Playgroud)

很复杂的东西,我想你会同意的.事情是,ValueA只能是几种特定类型(比方说string,intFoo(这是一个类),ValueB可以是另一小类.我不喜欢将这些值视为对象(我希望温暖舒适的感觉)编码有点类型安全).

所以我想写一个简单的小包装类来表达ValueA逻辑上是对特定类型的引用这一事实.我打电话给班级,Union因为我想要实现的目标让我想起了C语言中的联合概念.

public class Union<A, B, C>
{
    private readonly Type type; 
    public readonly A a;
    public readonly B b;
    public readonly C c;

    public A A{get {return a;}}
    public B B{get {return b;}}
    public C C{get …
Run Code Online (Sandbox Code Playgroud)

c# type-safety discriminated-union

83
推荐指数
5
解决办法
3万
查看次数

标签 统计

c# ×1

discriminated-union ×1

type-safety ×1