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
相关产品推荐
相关产品推荐

