C# 如何声明可以接受可为null的Guid的泛型类型类?
我有以下资料:C# 如何声明可以接受可为null的Guid的泛型类型类?,c#,generics,C#,Generics,我有以下资料: public class APIResult<T> where T : class? 以及建造商,以供参考: public APIResult(T returnObject, ErrorResponseCode errorResponseCode) { Object = returnObject; ErrorResponseCode = errorResponseCode; } 您在评论中提到,where T:class?约束的原因是该类包含一个静
public class APIResult<T> where T : class?
以及建造商,以供参考:
public APIResult(T returnObject, ErrorResponseCode errorResponseCode)
{
Object = returnObject;
ErrorResponseCode = errorResponseCode;
}
您在评论中提到,
where T:class?
约束的原因是该类包含一个静态方法,GenerateAPIResult
,该方法有时可能返回null
,如果您没有该约束,则会导致编译器错误
如果让方法返回
default(T)
而不是null
,听起来可以删除约束。对于类和可空类型,default(T)
是null
;对于一般的结构,default(T)
是所有字段都是默认值的值。(我相信这总是与new T()
相同的值)为什么apireult
首先有where T:class?
约束?因为GenerateAPIResult
方法(问题更新)有时会返回null,而不指定where T:class?
会引发编译器错误(参数类型'null'不能分配给参数类型'T')尝试执行此操作时。可以使用Guid.Empty
(00000000-0000-0000-0000-000000000000)而不是null,并检查是否为空?@ataraxia您可以显示您尝试分配null
的代码吗?返回默认值(T)
相反,不需要约束。这意味着不可能返回空Guid,那么?@ataraxia好吧,如果T
是Guid?
,那么默认值(T)
是null
。因为Guid
是不可为空的类型,所以不存在nullGuid
这类东西。明白了,我把default(Guid)
和default(Guid?
)混淆了。现在就试试这个。
public APIResult(T returnObject, ErrorResponseCode errorResponseCode)
{
Object = returnObject;
ErrorResponseCode = errorResponseCode;
}