约束通用结构以具有不同的类型参数

时间:2018-10-25 18:44:53

标签: c# generics

我有这个struct OneOf<T1,T2>。我要确保typeof(T1) != typeof(T2)

我知道类型约束不能以此方式进行约束。所以我想我可以在静态构造函数中检查它。

static OneOf() => new[] {typeof(T1), typeof(T2)}.ThrowIfNotDistinctTypes();

但是,从静态构造函数中抛出它是非常糟糕的做法,因此这并不是一个选择。

然后我想,我将缓存结果并从构造函数中抛出。

private static readonly Boolean _areDistinctTypes_;

static OneOf() => _areDistinctTypes_ = new[] {typeof(T1), typeof(T2)}.AreDistinctTypes();

public OneOf(...) {if(!_areDistinctTypes_) throw new NotDistinctTypesException(); ... }

但是我记得这是一个struct。因此,我不能保证构造函数会运行,因为有人可以做default(OneOf<T1,T2>)。无参数构造函数不允许用于结构...

我可以检查并使用每种用法,例如当有人使用吸气剂时,但这会增加大量开销,我希望尽早失败。我在这里很不幸吗?

0 个答案:

没有答案