以下是班级:

public record ValueModel<T>where T:struct
{
    public T Value { get; init; } 
    public Boolean Result { get; init; }
}

下面是返回ValueModel结果的方法:

public ValueModel<T> GetValue<T>(string key)
{
  ///some logic
  ///return a ValueModel;
}

正如我在上面编写的方法一样,VS总是报告错误.它说T必须是不可为空的值类型.

我的代码有什么问题?我应该如何更正它?

推荐答案

ValueModel<T>的定义表示泛型类型T必须是struct,因为您在方法定义中编写了where T:struct.但是方法GetValue<T>定义了没有这种限制的泛型类型T.这意味着该方法(ValueModel<T>)的返回类型可以使用泛型类型,即不是struct.这就是编译器告诉您的冲突.ValueModel<T>的人说一定是struct,但GetValue<T>的人说不一定要.

GetValue<T>的定义中再增加同样的"限制",如下所示:

public ValueModel<T> GetValue<T>(string key) where T:struct
{
    ///some logic
    ///return a ValueModel;
    return default;
}

这样,GetValue()的泛型类型T只能是struct,这符合ValueModel<T>的泛型类型T的限制.

Csharp相关问答推荐

在一个模拟上设置一个方法,该模拟具有一个参数,该参数是一个numc函数表达式

如何使用C#Interop EXCEL创建度量衡

JSON空引用异常仅在调试器中忽略try-Catch块,但在其他上下文中捕获得很好

C#-VS2022:全局使用和保存时的代码清理

为基本审计设置Audit.EntityFramework.Core

如何让NLog停止写入冗余信息?

使用Entity Framework6在对象中填充列表会导致列表大多为空

为什么AggregateException的Catch块不足以处理取消?

在C#中,非静态接口方法的抽象和虚拟是冗余的吗?

有没有类似于扩展元素的合并元组的语法?

是否有必要在ASP.NET Core中注册可传递依赖项?

如何管理Azure认证客户端响应和证书 fingerprint

避免只读记录 struct 中的防御副本

在C#中过滤Excel文件

将FileStream的特定部分作为字节数组读取

使用C#代码和SQL SERVER中的相同证书签名会产生不同的结果

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

如何在C#中抽象Vector256;T<;的逻辑以支持不同的硬件配置?

.NET6最小API:操作.MapGet之后的响应

将两个JSON文件与覆盖值的主文件合并