我已经为我Option的一些项目实现了一个类型,如下所示:
public abstract Option<T> {}
public class None<T> : Option<T>
public class Some<T> : Option<T>
{
public T Value { get; }
public Some(T value)
{
Value = value;
}
}
为了找出一个选项是否包含一个值,我使用了这个利用模式匹配的扩展方法:
public static bool TryGetValue<T>(this Option<T> option, out T value)
{
if (option is Some<T> some)
{
value = some.Value;
return true;
}
value = default;
return false;
}
我现在收到以下警告return default;
无法将 null 文字转换为不可为 null 的引用或不受约束的类型参数
我不可能将泛型参数限制T为classor struct。
例如,如果我将泛型参数限制为 ,则class无法生成Option<int?>实例,因为Nullable<int>类型是 astruct本身。通过后缀将 out 参数声明为可为空也不?是看起来的解决方案。
对我来说,在这个阶段,类型系统有些破损或没有彻底考虑过。Nullable 应该是 aclass或者需要有一个通用参数限制,例如:
public static bool TryGetValue<T>(this Option<T> option, out T value)
where T : nullable [...]
是否有另一种可能适合此问题的方法?我错过了什么?
ITMISS
侃侃尔雅
相关分类