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

Unity报错CS0104:'NotNull'为JetBrains与System命名空间的模糊引用

错误原因

你遇到的CS0104错误属于C#常见的类型名冲突问题:当前代码同时引用了JetBrains.Annotations和System.Diagnostics.CodeAnalysis两个命名空间,两个命名空间下都存在名为NotNullAttribute的特性,编译器无法判断[NotNull]应该指向哪个类型。

解决方案

推荐优先使用第一种方案,改动最小:

方案1:全局指定NotNull别名

在FaceSubsystemSender.cs文件的引用声明区域(所有using语句的末尾)添加一行别名声明:

using NotNull = JetBrains.Annotations.NotNullAttribute;

由于你的代码中还使用了[CanBeNull]等JetBrains.Annotations命名空间下独有的注解,指定别名后所有[NotNull]特性会自动指向JetBrains提供的实现,不需要修改其他代码,保存文件后等待Unity重新编译即可解决问题。

方案2:给所有NotNull补充完整命名空间

如果不想加别名,可以把代码中所有的[NotNull]替换为完整的限定名,需要修改的位置共5处:

  • trySerializeUniqueData方法的参数:[JetBrains.Annotations.NotNull] List<ARFace> argsAdded
  • FaceUniqueData结构体的字段:[JetBrains.Annotations.NotNull] public int[] indices、[JetBrains.Annotations.NotNull] public Vector2Serializable[] uvs
  • FaceSubsystemData类的字段:[JetBrains.Annotations.NotNull] public ARFaceSerializable[] added, updated, removed
  • getField静态方法的返回值特性:[JetBrains.Annotations.NotNull] static FieldInfo getField(string name)

方案3:切换为使用.NET自带的NotNull特性

如果不需要保留JetBrains的注解适配,可删除using JetBrains.Annotations;引用,再做如下修改:

  • 所有[NotNull]替换为[System.Diagnostics.CodeAnalysis.NotNull]
  • 所有[CanBeNull]替换为[System.Diagnostics.CodeAnalysis.MaybeNull]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:54:02