泛型类型参数没有装箱或类型参数转换

2024-02-18

我有以下辅助方法:

public static T CreateRequest<T>()
    where T : Request, new()
{
    T request = new T();
    // ...
    // Assign default values, etc.
    // ...
    return request;
}

我想从另一个助手中的另一个方法内部使用此方法:

public T Map<F, T>(F value, T toValue)
    where T : new()
    where F : new()
{
    if (typeof(T).BaseType.FullName == "MyNamespace.Request")
    {
        toValue = MyExtensions.CreateRequest<T>();
    }
    else
    {
        toValue = new T();
    }
}

但后来我收到错误:

类型“T”不能用作泛型类型或方法“MyExtensions.CreateRequest()”中的类型参数“T”。没有从“T”到“MyNamespace.Request”的装箱转换或类型参数转换。

有没有办法强制转换类型“T”,以便 CreateRequest 可以毫无问题地使用它?

EDIT:

我知道我可以做两件事:

  • 放宽对 CreateRequest 的限制或
  • 收紧 Map 中的约束。

但我不能做第一个,因为在 CreateRequest 中我使用 Request 类的属性,而我不能做第二个,因为我使用其他类型(不从 Request 继承)和 Map 函数。


对于这种情况,您需要放宽以下通用限制CreateRequest.

public static T CreateRequest<T>()
    where T : new()
{
    if(!typeof(Request).IsAssignableFrom(typeof(T)))
        throw new ArgumentException();

    var result = new T();
    Request request = (Request)(object)result;
   // ...
   // Assign default values, etc.
   // ...
   return result ;
}

这可能会很痛苦,因为您会丢失此参数的编译时验证。

或者如果你想使用CreateRequest其他地方的方法然后仅为此场景创建非通用重载。

public static object CreateRequest(Type requestType)
 {
    if(!typeof(Request).IsAssignableFrom(requestType))
        throw new ArgumentException();

    var result = Activator.CreateInstance(requestType);
    Request request = (Request)result;
   // ...
   // Assign default values, etc.
   // ...
   return result ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

泛型类型参数没有装箱或类型参数转换 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • 在matlab中计算闭合曲线(或多边形)的曲率

    考虑以下几点 x 1 34 0 92 0 68 0 25 0 06 0 34 0 49 0 72 0 79 0 94 1 35 0 35 0 54 0 68 0 84 1 20 1 23 1 32 1 34 y 0 30 0 43 0 90
  • 如何快速混合 RGBA 无符号字节颜色?

    我正在使用 c 我想使用以下代码进行 alpha 混合 define CLAMPTOBYTE color if color 255 color BYTE color gt gt 31 else color BYTE color define
  • 创建DIBection失败

    BITMAPINFO bmi memset bmi 0 sizeof BITMAPINFO bmi bmiHeader biSize sizeof BITMAPINFOHEADER bmi bmiHeader biWidth m pImg
  • NOT EXISTS 和 COUNT(*) 之间的区别

    我在两个我认为等效的语句之间得到了不同的响应 SELECT COUNT vs NOT EXISTS 在大约 50 次执行中的 49 次中 这两个语句的行为相同 但有时却不然 我的猜测是 这些语句处理锁定页面或处理更 遥远 的事情的方式之间存
  • 将到期日期格式化为 mm/yy 格式

    您好 我正在编写一个编辑文本 其中我想要 MM YY 格式的信用卡到期日期 我要实现的算法如下 如果用户输入 2 到 9 之间的任何内容 我将文本输入更改为 02 到 09 如果用户输入 1 那么我等待下一个数字并检查 int 值月份是否小
  • 执行期间检测下溢

    有没有办法在执行过程中自动检测下溢 具体来说 我认为应该有一个编译器选项来生成代码 在可能导致下溢和类似错误的数学运算之后立即检查它们 我说的是 G 编译器 C99 C 11 具有浮点控制函数 例如fetestexcept 和定义的标志 包
  • 有人可以发布一个 Swift 中 MVC 模式的好例子吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 一个实现了MVC模式的简单项目 到目前为止 我对它的情况有一个简单的了解 但我想看看实际的实现 这是
  • 从 Hive 表读取数据创建的 Spark DataFrame 的分区数

    我对 Spark 数据帧分区数量有疑问 如果我有 Hive 表 员工 其中包含列 姓名 年龄 ID 位置 CREATE TABLE employee name String age String id Int PARTITIONED BY
  • 从 github wiki 页面创建 gitbook

    我在 github wiki 中有很多文档 我想整理它并用它创作一本书 当我更新维基时 这本书也应该更新 这可能吗 欢迎来到 Gitbook 这项服务可能会对您有所帮助 https docs gitbook com integrations
  • jQuery 解析 XML 在 jQuery Mobile 列表中显示 UL UL 仅返回 XML 中的最后一项

    我正在使用 jQuery Mobile 1 1 1 和 jQuery 1 7 1 JQuery mobile 可以有一个嵌套列表 单击后可以在另一个屏幕中显示下一个 ul 看这个例子 我试图通过解析 XML 数据文件来做到这一点 我列出列表
  • Flutter如何更改ListTile中选定图块的背景颜色

    我正在尝试更改 ListTile 中选定图块的背景 我搜索并找到了以下两篇文章 但是它们都不能解决我的问题 Post1 https stackoverflow com questions 49331612 change background
  • 更改 Maven Archetype 中的包属性

    我创建了一个 Maven 原型 我的META INF maven archetype metadata xml看起来像这样
  • Univocity - 解析 CSV 时检测缺失列

    我正在使用 Univocity 库来解析 CSV 它工作得很好 但我需要一种方法来检测正在解析的文件的列数是否少于所需的列数 例如 如果我期望一个 3 列文件 其中列映射到 H1 H2 H3 那么我收到一个如下所示的文件 没有标题 V1 H
  • 从启动器菜单处理应用程序关闭事件

    我想做的是知道用户何时从 Android Launcher 的菜单关闭应用程序 长按主页按钮即可打开该菜单 我想在用户关闭应用程序时执行一些操作 实际上 我希望用户每次离开应用程序时都注销 但只要他也可以关闭应用程序 我就必须处理此事件 然
  • 支持库 24.2.1 中锚定 FloatingActionButton 的错误

    我从 24 2 0 开始就遇到这个问题 但现在我使用 24 2 1 这个错误仍然存 在 它只在 我有一个锚定的 FloatingActionButton 如下所示
  • isinstance('aaa', basestring) 和 isinstance('aaa', str) 有什么区别?

    a aaaa print isinstance a basestring true print isinstance a str true 在 3 0 之前的 Python 版本中 有两种字符串 纯字符串 和 unicode 字符串 纯字符
  • HighCharts -- MVC 3 数据库

    我正在 Visual Studio 2010 中使用 DotNet Highcharts 我正在创建一个 MVC 3 Web 应用程序 我可以通过静态分配数据来使 HighCharts 工作 我希望能够将数据从数据库发送到 HighChar
  • 如何将密码编码器附加到 Silex 中的用户界面?

    因此 我尝试创建一个新的 Silex 应用程序并使用包含的安全包 为了简单起见 我将使用基本的密码编码 根据 Silex 文档http silex sensiolabs org doc providers security html htt
  • 如何在C++程序中获得debug/release条件编译

    在大型 C Qt QMake qtcreator 项目中 我想执行一些测试 但仅限于使用调试标志进行编译时 有没有办法告诉 g 代码的某些小部分只能在调试模式下编译 执行此操作的标准方法是依赖于宏NDEBUG 由宏使用assert 定义于
  • 泛型类型参数没有装箱或类型参数转换

    我有以下辅助方法 public static T CreateRequest