如何使方法的返回对象通用?

2023-11-30

我需要执行类似下面的代码的操作,但是 new T() 不起作用。它说 “无法创建变量类型 T 的实例,因为它没有 new() 约束。”

public static T MapToBaseDropDown2<T>(this GenericDropDownData dd) where T : BaseDropDown
{
    return new T() //FAILS
    {
        Id = dd.Id,
        Description = dd.Description
    };
}

BaseDropDown 是 3 个子级的基类,这些子级是使用 EntityFramework 映射的实体(代码优先),因此最好保持尽可能简单。

现在,由于我尝试过的一些实现,它并不是抽象的,但如果可能的话,它会是抽象的。

public class BaseDropDown
{
    public int Id { get; set; }
    public string Description { get; set; }
}

Calling new T()假设每种类型has无参数构造函数,这里似乎不是这种情况。即使你的基础阶级BaseDropDown有这样一个构造函数,不能保证其所有子类,特别是抽象子类:

class BaseDropDown
{
    public BaseDropDown() { /* see parameterless-constructor exists */ }
}
abstract class MyClass : BaseDropDown
{
    public MyClass() { ... }
}

现在您可以使用new-限制为exclude抽象类:

public static T MapToBaseDropDown2<T>(this GenericDropDownData dd) where T : BaseDropDown, new()

该约束将仅允许继承的类BaseDropDown and可以使用无参数构造函数实例化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使方法的返回对象通用? 的相关文章

随机推荐

  • C++隐式转换序列中的三种转换

    页面位于http en cppreference com w cpp language implicit cast声明在隐式转换序列中最多可以完成三个转换序列 隐式转换序列按以下顺序包含以下内容 零个或一个标准转换序列 零个或一个用户定义的
  • LINQ to SQL SubmitChanges() 进度

    我正在使用 LINQ to SQL 将旧的 DBF 文件导入 MSSQL 我正在读取所有行并将它们添加到数据库中ctx MyTable InsertOnSubmit row 读取阶段完成后 我有大约 100 000 个待处理插入 ctx S
  • System.IO.File.ReadAllBytes 对于大于 2GB 的文件

    我有一个大文件 需要将其复制到内存中以供进一步处理 该软件对于小于 2GB 的文件运行良好 但一旦超过此限制 我就会得到一个例外 即 ReadAllBytes 仅支持小于 2GB 的文件 byte buffer System IO File
  • ClearCase:是否可以选择性地交付或变基?

    当将流A传递到流B时 是否可以只将选定的元素 准确地说是目录 从A传递到B 当从基线 B 变基流 A 时 是否可以仅将所选元素 准确地说是目录 从 B 变基到 A 使用 ClearCase UCM 您正在交付的是基线或活动 您正在重新设定的
  • HERE 地图 Android 集成,MISSING_LIBRARIES 错误

    我按照步骤操作https developer here com mobile sdks documentation android topics app simple android studio html 但我收到错误 无法初始化地图片段
  • 将文本字符 ☢ 在圆圈内垂直和水平居中 (CSS)

    我正在尝试将此文本字符 置于圆圈内 虽然 IE 10 显示文本垂直和水平居中 但 Chrome 和 Firefox 在顶部呈现过多的填充 任何想法如何解决这一问题 Flexbox 不是必须具备的 HTML div class tl icon
  • 更新 IPython/Jupyter 中使用的 R

    我想在 Jupyter Notebook 中使用 R 因此我通过 R Essentials 安装 请参阅 https www continuum io blog developer jupyter and conda r 安装的版本如下 R
  • 如何知道安装何时完成

    我正在创建一个应用程序来安装从服务器下载的应用程序 我想安装这些应用程序 下载文件后 我用于安装的方法的代码位于此处 public void Install String name prompts user to accept any in
  • 这段代码中 malloc 做了什么?

    你能解释一下下面的代码吗 str char malloc sizeof char num 1 什么是malloc在这里做什么 Why is num 1 used malloc是一个函数在堆上分配一块内存并返回一个pointer到它 它类似于
  • jQuery .append() 函数

    Why this mydiv append ul mydiv append li Hello li mydiv append ul alert mydiv html produces ul ul li Hello li and not ul
  • 理解类变量的继承

    我正在建造一个Challenge24SolverJava 中的类 逻辑本身起作用并找到预期的解决方案 具有任意数量的参数 无论如何 这部分项目正在按我的预期进行 这个问题来自于解决方案的表示问题 可以公平地说 我已经用 Python 完成了
  • 如果用户喜欢该页面,则signedRequest不会返回

    您好 我正在使用 facebook sdk php 版本 开发一个 fb 应用程序 但由于某种原因 signedRequest 没有返回我喜欢的变量以确定用户是否喜欢该页面 以下是signedrequest的print r Array id
  • 如何在 TypeScript 中定义一种类型,该类型可以具有除特定属性之外的任何属性?

    当编写像商店这样的字典的接口时 我想区分数据模型和商店中的项目 即id和模型 我想添加模型本身不使用字段的约束id在他们的界面中 但我不知道该怎么做 type Item
  • 将 Joomla 安装在子目录中

    你们中有些人可能知道 Wordpress 在设置中有一个选项 允许将站点安装在子目录中 同时将站点 URL 设为主域 它类似于 站点 url 和 Wordpress url 我正在 Joomla 中寻找类似的东西 我知道它没有内置选项 但如
  • Azure 存储队列和多个 WebJobs 实例:QueueTrigger 是否会在触发时设置消息租用时间?

    场景 生产者发送一条消息到Storage Queue 一个WebJobs在QueueTrigger上处理该消息 每条消息只能处理一次 可以有多个WebJob实例 我一直在谷歌搜索 根据我读到的内容 我需要编写处理消息的函数 使其具有幂等性
  • Webbrowser,检测是否安装了PDF阅读器?

    有没有办法检查用户是否安装了PDF阅读器 也许使用 ActiveX 组件 请你帮助我好吗 您可以使用以下命令检测已安装的插件window navigator plugins这将返回一个包含已安装插件详细信息的数组 但这不适用于 Intern
  • 使用 Clang 与全局模板变量重复符号

    我有这三个文件 foo h pragma once template
  • 具有CurrencyFormat 和PropertyChanged 触发器的TextBox 不接受正确的文本

    我有一个TextBox在绑定到类型窗口的依赖属性的 WPF 窗口中double 见下文 每当用户输入TextBox when The TextBox为空 或者 全部文字都被选中 键入的文本被错误地接受 例如 如果我在这两种情况下键入 5 则
  • 在获取请求中显示不同的结果,按属性分组并计算该属性的总数

    设想 我有一个费用跟踪 iOS 应用程序 并且有一个名为 DashBoardViewController 的视图控制器 表视图控制器 带 FRC 它基本上可以对给定一周 一个月或一年的费用 收入进行分类 并将其显示为节标题例如标题 2012
  • 如何使方法的返回对象通用?

    我需要执行类似下面的代码的操作 但是 new T 不起作用 它说 无法创建变量类型 T 的实例 因为它没有 new 约束 public static T MapToBaseDropDown2