gpt4 book ai didi

c# - 为什么 Nullable 被视为结构而不是类?

转载 作者:太空狗 更新时间:2023-10-29 17:40:18 25 4
gpt4 key购买 nike

我正在尝试定义一个泛型类,它采用可以设置为 null 的任何类型:

public abstract class BundledValue_Classes<T> 
where T : class
{
private Tuple<T, object> _bundle= new Tuple<T, object>();
public T Value
{
get { return _bundle == null ? null : _bundle.Item1; }
set { _bundle = new Tuple<T, object>(value, obj); }
}
//...

这很好用。我还想创建一个可以采用任何原始类型(int、double 等)的派生类,并将其简单地解析为与上述类相同的类,但原始类包含在 Nullable 中

public abstract class BundledValue_Structs<T> 
: BundledValue_Classes<T?>
where T : struct
{
//...
}

但出于某种原因,这不起作用。我收到错误:The type 'T?' must be a reference type in order to use it as parameter 'T' in the generic type or method 'BundledValue_Classes<T>'

我想在这里做什么很清楚吗?我不想复制粘贴整个 BundledValue_Classes<T> 的内容类只是为了处理包装在 Nullable<T> 中的原语的情况.

也许有一些方法可以在 BundledValue_Classes<T> 上设置类型约束这样它不仅接受类,而且接受任何可以分配空值的类型(包括 Nullable<T> 类型,这似乎是该规则的唯一异常(exception)。)

最佳答案

Nullable<T> 一个结构,as per the documentation .它根本不是一个类。它是一个值类型,从字段上看有点像这样:

public struct Nullable<T>
{
private readonly T value;
private readonly bool hasValue;
}

null Nullable<T> 的值类型不是空引用,它只是一个值,其中 hasValue字段为假。

请注意 Nullable<T>不满足 where TFoo : struct 约束的条件但是,因为这实际上是一个不可空 值类型约束。基本上 Nullable<T>不满足 classstruct约束。没有只允许可空类型的约束(引用或 Nullable<T> )。

关于c# - 为什么 Nullable<T> 被视为结构而不是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20588711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com