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

如何定义同时支持int、string作为泛型参数的可空IAuditEntity接口

报错原因

开启可空引用类型校验后,编译器无法确定泛型参数TKey属于值类型还是引用类型,无法判断TKey?对应Nullable<TKey>(值类型可空包装)还是可空引用类型,因此抛出该错误。

解决方案

方案1:.NET 7 / C# 11 及以上版本(推荐)

C# 11 原生支持无约束泛型参数的可空声明,无需修改原有接口结构即可直接使用:

public interface IAuditEntity<TKey>
{
    TKey? UpdatedBy { get; set; }
}

该写法会自动适配两种泛型类型规则:

  • 当TKey为int等值类型时,TKey?自动映射为Nullable<int>
  • 当TKey为string等引用类型时,TKey?自动映射为可空引用类型

方案2:兼容 .NET 6 及更早版本

如果项目需要适配低版本框架,可使用[MaybeNull]特性告知编译器属性允许为空:
首先引入对应命名空间:
using System.Diagnostics.CodeAnalysis;
修改接口定义如下:

public interface IAuditEntity<TKey>
{
    [MaybeNull]
    TKey UpdatedBy { get; set; }
}

该方案无需添加泛型约束,即可同时支持值类型和引用类型作为TKey参数,满足int和string两种主键的使用需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:04