c# - 强制 T 作为代码中的引用类型 [CS0452 错误]

标签 c# generics interface reference-type

我对 T 存在以下问题,并且可以使用通用方法将其限制为例如引用类型(其中 T :类)。所以我得到了以下代码:

public void mySave<T>(string filename, T obj)
{
    Session s = connect(filename);
    s.Save(obj);
}

public Document Save<TEntity>(TEntity entity) where TEntity : class;

无法声明 mySave where T : class 因为我是从接口(interface)获取它的。无论如何,我需要解决 CS0452(类型"typename"必须是引用类型,才能将其用作泛型类型或方法“泛型标识符”中的参数“参数名称”)

对此有什么想法吗?

最佳答案

如果某些泛型参数有一些约束,则用作参数的任何其他泛型参数必须至少提供相同的类型保证。

由于泛型是一个编译时功能,想象一下 Save<TEntity>需要TEntity作为引用类型,您可以给出一个可能是也可能不是值类型的参数。这将违背泛型的目的。

您最好的选择是将整个通用约束(即 T : class )也添加到界面中。

关于c# - 强制 T 作为代码中的引用类型 [CS0452 错误],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983025/

相关文章:

c# - ASP.NET 4.5 TryUpdateModel 不使用母版页在 WebForm 中选择表单值

ios - 归档时 Xcode 10 Generics typealias Segmentation Fault 11

Java 泛型 : Accessing Generic Type at runtime

c# - 为什么我不能公开已实现的接口(interface)方法?

json - Golang中的Encode Set数据结构

java - 针对异常的 Java 接口(interface)的正确设计

c# - 如何使用 Linq 获取唯一的实体集?

c# - 在客户端处理文本输入

c# - 从 IIS 上载的 Excel 文件中读取有限的行

r - 如何定义与原始函数同名的 S3 泛型?