假设我有一个通用参数类,但参数值必须是以下之一:
int, double, string, bool, DateOnly
任何其他类型都应被拒绝。
public record Parameter<T>(string Name, T Value) where T : ...
假设我有一个通用参数类,但参数值必须是以下之一:
int, double, string, bool, DateOnly
任何其他类型都应被拒绝。
public record Parameter<T>(string Name, T Value) where T : ...
由于在 C# 中无法对类型约束放置 OR 条件,因此为了在编译时保持约束,可以使用抽象类:
创建抽象参数记录:
然后创建您想要允许的定义:
像这样,在您的代码中您将被迫创建类型化参数,但是
Parameter<T>
一旦创建它们您就可以使用它们。您还可以创建一个工厂:
我非常喜欢使用
OneOf
。它是一个库,您可以在其中定义一个已定义的类型,并且易于使用类似于 F# 的 C# 联合,并具有详尽的编译时匹配。示例代码:
输出: