You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#泛型类返回报错:T必须为非可空值类型,如何修正?

问题原因与修正方案

问题根源

你的GetValue<T>泛型方法未对类型参数T添加与ValueModel<T>匹配的约束。ValueModel<T>通过where T:struct限定T必须是不可为空的值类型,但GetValue<T>中的T没有任何约束,编译器无法确保传入的T满足ValueModel<T>的类型要求,因此抛出错误。

修正方法

给GetValue<T>方法添加相同的struct约束,保证T符合ValueModel<T>的类型要求:

public ValueModel<T> GetValue<T>(string key) where T : struct
{
    // 你的业务逻辑实现
    return new ValueModel<T> { Value = default, Result = true }; // 示例返回代码
}

可选扩展(支持可为空值类型)

如果需要让T支持可为空的值类型(如int?、DateTime?),可以将约束改为struct?,同时同步调整ValueModel<T>的约束:

public record ValueModel<T> where T : struct?
{
    public T Value { get; init; } 
    public bool Result { get; init; }
}

public ValueModel<T> GetValue<T>(string key) where T : struct?
{
    // 你的业务逻辑实现
    return new ValueModel<T> { Value = default, Result = true };
}

内容的提问来源于stack exchange,提问作者Melon NG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:22:05