C# 泛型和推断类型

标签 c# .net generics

我在尝试编写通用方法以从 Sterling 数据库保存和加载数据时遇到困难。

这是我的保存方法:

public static void SaveList<T>(List<T> listToSave)
{
    foreach (T listItem in listToSave)
    {
        DatabaseInstance.Save(listItem);
    }
}

我在保存下看到一条波浪形的红线和一个错误“The Type T must be a reference type to use it as parameter T”

这是我的加载方法:

    public static List<T> LoadList<T>()
    {
        List<T> list = (from index in DatabaseInstance.Query<T, int>() select index.Key).ToList();

        return list;
    }

我得到了同样的错误。

有什么想法吗?

干杯

史蒂夫

更新:

我按照建议添加了一个 where T : class 并得到了一个错误:

Type T 必须有一个公共(public)的无参数构造函数才能将其用作参数

按照 Bryan 提供的链接中的说明,我在最后添加了 new(),现在一切正常。

最佳答案

你需要一个 generic type constraint根据您的定义:

public static void SaveList<T>(List<T> listToSave) where T : class
{
    foreach (T listItem in listToSave)
    {
        DatabaseInstance.Save(listItem);
    }
}

public static List<T> LoadList<T>()  where T : class
{
    List<T> list = (from index in DatabaseInstance.Query<T, int>() select index.Key).ToList();
    return list;
}

关于C# 泛型和推断类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7989560/

相关文章:

typescript - 从泛型类获取方法的参数 - TypeScript

c# - 如果存在查询则更新

c# - 方法内修改方法参数或返回结果

c# - iTextSharp RegionTextRenderFilter 在宽度的情况下不起作用

c# - 下载并执行 SQL 脚本——有哪些安全问题+解决方案?

c# - 接口(interface)的通用实现

c# - foreach 与 someList.ForEach(){}

c# - 如何解决这个 :Struct In Collection not changed

c# - Mono 什么时候支持 System.ComponentModel.DataAnnotations?

c# - 使用传统 [] 数组语法的 C# 中基于非 0 的数组?