为什么我无法实例化从匿名对象推断类型的泛型类?

2024-01-30

假设我有一些课程 - 假设的例子:

public class InvalidResponseException<TReq, TResp> : Exception
{
    public TReq RequestData { get; protected set; }
    public TResp ResponseData { get; protected set; }

    public InvalidResponseException(string message, TReq requestData, TResp responseData)
        : this(message, null, requestData, responseData)
    {
    }

    public InvalidResponseException(string message, Exception innerException, TReq requestData, TResp responseData)
        : base(message, innerException)
    {
        RequestData = requestData;
        ResponseData = responseData;
    }
}

好的,类定义了......并且编译,没问题。

因此,可以说在我的代码正文中的其他地方,我想抛出此异常并将匿名对象传递到一种或多种类型的异常中。这应该使它足够通用,以便我可以在任何从代码库中的某些调用获得意外响应的地方使用它:

var reqData = new { 
    Context = SomeDataContext,
    Username = SomeUserName,
    ParentID = 54,
    RequestValues = ListOfItemsToGet
}

var respData = results.ToList();

string exceptionMessage = string.Format("Invalid response data detected. Requested {0} items received {1}.", ListOfItemsToGet.Count(), results.Count());

throw new InvalidResponseException(exceptionMessage, reqData, respData);

对于大多数匿名调用,您可以使用类型推断,因此您不必在方法调用中定义类型...但是这段代码将无法编译。

如果我将鼠标悬停在 reqData 的“var”上,编译器会告诉我有一个为其定义的类型,尽管这是一个没有人可以手动分配的奇怪名称......所以理论上我认为可以从中推断出该类型。

我最初的结论是,您不能将匿名类型传递给泛型,但是您确实可以以某种方式将匿名对象传递给泛型:

var BritishExpats = from p in People
                    where p.CountryOfBirth == "United Kingdom" && p.CountryOfResidents != p.CountryOfBirth
                    select new { FirstName = p.FirstName, LastName = p.LastName }

这里“BritishPeople”是一个 IEnumerable,其中 T 被推断为 'a

...我可以迭代生成的匿名对象 IEnumerable 并引用它们的公共属性,没有任何问题...

foreach (var ExPat in BritishExpats)
{
    Console.WriteLine("{0}, {1}", Expat.LastName, Expat.FirstName);
}

当然,我必须在循环中使用“var”,因为我们不really知道“BritishExpats”是什么类型。

因此,我可以使用匿名对象推断的类型实例化某些类型的类,但不能实例化其他类型的类......

...对于匿名对象可以和不能实例化、推断和推断什么有规律或理由吗?


您不能将泛型、匿名类型和类型推断放在构造函数中。编译器就是无法理解它。您可以通过辅助类创建解决方法,例如:

public static class InvalidResponseExceptionHelper
{
    public static InvalidResponseException<TReq, TResp> Create<TReq, TResp>
        (string message, TReq requestData, TResp responseData)
    {
        return new InvalidResponseException<TReq, TResp>(message, 
            requestData, responseData);
    }
}

另外,我没有提到,但是你的InvalidResponseException除非进行大量修改,否则类不会编译。然而,你的问题的概念已经通过了。

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

为什么我无法实例化从匿名对象推断类型的泛型类? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • Python:如何将进程轮询和非阻塞 WebSocket 服务器结合起来?

    我有个主意 编写一个基于 WebSocket 的 RPC 该 RPC 将根据以下场景处理消息 客户端连接到 WS Web 套接字 服务器 客户端向WS服务器发送消息 WS服务器将消息放入传入队列 可以是multiprocessing Que
  • 按 RDD 值从 Cassandra 表中过滤

    我想根据 RDD 中的值从 Cassandra 查询一些数据 我的方法如下 val userIds sc textFile tmp user ids keyBy e gt e val t sc cassandraTable keyspace
  • 如何在 npm 包中捆绑依赖项?

    我有一个 npm 包 它引用了其他本地包 它有这样的结构 deploy typescriptapp tgz references mydependency 包 json app js app css typescriptapp 包 json
  • 中间人:从 Markdown 引用存储在数据文件中的 URL

    For my 中间人构建的网站我已将所有页面的链接和其他信息存储在数据文件中 https middlemanapp com advanced data files data pages yaml pageA link some long u
  • 关于 Nix 包管理的 Nix 表达式是什么?

    即使在阅读了 Nix 手册之后 仍然对 Nix 表达式的真正含义感到困惑 有时它们被称为派生 但存储派生也有其他含义 在尼克斯 一个尼克斯表达只是您可以用 Nix 语言编写的任何类型值的通用术语 Nix 表达式可以是集合 列表 数字 字符串
  • 如何将 Google Plus 与 iPhone sdk 集成?

    我想将 google plus 集成到我的应用程序中 但我不知道从哪里开始 所以如果有人对此有任何想法 请回复我 以此为基础 gt https developers google com api https developers googl
  • 如何从 ORMLite 的 sqlite 数据库生成 java 类代码

    给定一个 sqlite 数据库作为输入 我想知道如何生成一个ORMLite http ormlite com 与关联数据库映射的java类 非常感谢 你可以尝试Telosys 工具 一个用于代码生成的 Eclipse 插件从现有数据库工作具
  • 文件上传大文件 PHP/AJAX [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Github API - 检索用户提交?

    我正在尝试构建一种方法 在该方法中我可以访问 Github 用户名 并发布该用户的所有提交或至少一些提交 是否有调用 GET user repo commit 关联或直接用户 提交 现在 我认为需要采取以下措施 获取与特定名称关联的存储库
  • Option 类型的类型转换

    我是 Python 的 Rust 新手 我相信这是一个基本问题 但我太新了 无法通过诸如类型转换选项 在Python中 让类型检查器知道返回类型不是Optional int int 我们可以解决assert强制类型检查器知道的逻辑x永远不会
  • 在python中分配列表中的每个第N个元素

    我想将列表中的每个第 N 个元素设置为其他值 Like 这个问题 https stackoverflow com questions 14994140 how do you make every other integer in an ar
  • C语言中指针可以指向自身内存地址吗?

    在下面的代码中 一个指针指向它自己的内存地址 include
  • Hibernate:多对多连接表的标准?

    考虑以下两个关系 Entity class Foo Id id ManyToMany JoinTable name ATag joinColumns JoinColumn name foo id inverseJoinColumns Joi
  • Python 中 import 和 __import__ 的区别

    我正在查看项目的一些提交 我在文件中看到以下更改 import dataFile dataFile import dataFile 编码器被替换import dataFile by dataFile import dataFile 它们之间
  • 谷歌云存储坏了? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 今天我不断得到 The request s content type is not accepted on this URL 对于
  • 将图像放置在右上角 - CSS

    我需要在 div 的右上角显示图像 该图像是 对角线 功能区 但将当前文本保留在内部 div 中 就像粘在其顶部一样 我尝试了不同的方法 例如将图像包含在另一个 div 中或定义其类 例如 ribbon position relative
  • Postgres数据库如果不存在则创建[重复]

    这个问题在这里已经有答案了 有没有类似的CREATE TABLE IF NOT EXISTS用于创建数据库 背景 我正在编写一个脚本来在未知系统上自动设置 PostgreSQL 中的架构 我不确定数据库 甚至是架构的一部分 是否已经部署 因
  • 如何在 Erlang/OTP 中将 datetime() 转换为 timestamp()?

    我需要转换 2012 9 21 13 21 11 into timestamp 我怎样才能做到这一点 更正版本 Seconds calendar datetime to gregorian seconds DateTime 62167219
  • 具有相同名称的函数声明内的函数声明 javascript

    我刚刚在 javascript 中看到了这种模式 var test function function test args this properties args etc test prototype methodName functio
  • 为什么我无法实例化从匿名对象推断类型的泛型类?

    假设我有一些课程 假设的例子 public class InvalidResponseException