改写的问题:
我有这个具有泛型类型的相等比较器限制为class
public class ReferenceEqualityComparer<T> : IEqualityComparer<T> where T : class
{
public static ReferenceEqualityComparer<T> Default => new();
public bool Equals(T? x, T? y) => ReferenceEquals(x, y);
public int GetHashCode(T? obj) => RuntimeHelpers.GetHashCode(obj);
}
当一个班级让我们说
public class A
{
public string? P1{get; set;}
}
由代码生成器使用
[Generator]
public class MyCodeGenerator : ISourceGenerator
{
}
NetAnalyzer 说string?
有一个 TypeKind 类
但是当我这样做时,
#nullable enable
[TestMethod]
public void RefTest()
{
string? s1 = "adsad";
string? s3 = s1;
Assert.IsTrue(ReferenceEqualityComparer<string?>.Default.Equals(s1, s3));
}
#nullable restore
它说不string?
符合“类”约束。即使分析器告诉我它是一个类,我是否在这里遗漏了什么?还是我误解了这个概念?
原始问题:根据微软文档中对Nullable的描述,它们被归类为structs
,但为什么 CodeAnalyzer 告诉我 TypeKind 的 TypeKindstring?
是 TypeKind.Class?
这是一些上下文,在我正在编写的库中,针对源生成(C# 9 源生成器)分析类,这基本上是使用 .NetAnalyzer。将检查类的每个属性是否将它们的类型视为类。事实证明,它string?
被视为一个类。