我有这个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>)
。无参数构造函数不允许用于结构...
我可以检查并使用每种用法,例如当有人使用吸气剂时,但这会增加大量开销,我希望尽早失败。我在这里很不幸吗?