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> argsAddedFaceUniqueData结构体的字段:[JetBrains.Annotations.NotNull] public int[] indices、[JetBrains.Annotations.NotNull] public Vector2Serializable[] uvsFaceSubsystemData类的字段:[JetBrains.Annotations.NotNull] public ARFaceSerializable[] added, updated, removedgetField静态方法的返回值特性:[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
相关产品推荐
相关产品推荐

