实现接口的数组的隐式类型

2024-02-25

我的印象是,C# 编译器将根据它们都可以隐式转换为的类型隐式键入一个数组。

编译器生成未找到隐式类型数组的最佳类型

public interface ISomething {}

public interface ISomething2 {}

public interface ISomething3 {}

public class Foo : ISomething { }
public class Bar : ISomething, ISomething2 { }
public class Car : ISomething, ISomething3 { }

void Main()
{
    var obj1 = new Foo();
    var obj2 = new Bar();
    var obj3 = new Car();

    var objects= new [] { obj1, obj2, obj3 };
}

我知道纠正这个问题的方法是声明类型,如下所示:

new ISomething [] { obj1, ...} 

但我在这里寻求幕后类型的帮助。


C# 编译器考虑所有指定元素的类型集。确实如此not考虑常见的基础类型等。

You could转换表达式之一:

var objects= new [] { obj1, obj2, (ISomething) obj3 };

...但就我个人而言,我只会使用显式形式:

var objects= new ISomething[] { obj1, obj2, obj3 };

或者,如果您明确声明了任何或全部obj1, obj2 and obj3作为类型ISomething,在不更改数组初始化表达式的情况下也可以正常工作。

来自 C# 3 规范,第 7.5.10.4 节:

数组创建表达式 第三种形式被称为隐式类型数组创建 表达。它类似于 第二种形式,除了元素 数组的类型没有明确 已给出,但确定为最佳 集合的公共类型(§7.4.2.13) 数组初始值设定项中的表达式。

第 7.4.2.13 节如下所示:

在某些情况下,通用类型需要 可以推断出一组表达式。 特别是,元素类型 隐式类型数组和返回 匿名函数的类型 块体就是这样找到的。 直观地讲,给定一组 表达式 E1…Em 这个推论 应该相当于调用 方法

Tr M<X>(X x1 … X xm)

以 Ei 作为参数。更多的 准确地说,推理开始于 具有不固定类型变量 X。 然后进行输出类型推断 来自类型 X 的每个 Ei。最后,X 是固定的,结果类型 S 是 由此产生的通用类型 表达式。

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

实现接口的数组的隐式类型 的相关文章

  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • GetType() 在 Type 实例上返回什么?

    我在一些调试过程中遇到了这段代码 private bool HasBaseType Type type out Type baseType Type originalType type GetType baseType GetBaseTyp
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • oracle sqlplus中获取sql脚本的执行时间

    我有一个脚本 用于将数据加载到 Oracle 中的表中 通过插入语句列表 如何获取整个加载过程的执行时间 我尝试过set timing on 但这给了我每个插入语句的持续时间 而不是整个过程的持续时间 脚本如下所示 spo load log
  • 是否可以将 supertest 与 hapi 一起使用?

    我用的是hapi 不是express 超级测试还应该有效吗 如果是这样 有没有一种快速方法可以更改我的代码以使其运行 我的测试看起来像这样 基于文档 https github com visionmedia supertest import
  • 如何在 Mockito 中模拟 CompletableFuture 的完成

    我想模拟当某个代码被调用时CompletableFuture已成功完成 我有这门课 public class MyClassImplementRunner implements Runnable private final String p
  • 通过参数对函数调用进行反跳

    David Walsh 拥有出色的去抖动实现here https davidwalsh name javascript debounce function Returns a function that as long as it cont
  • Firebase:观察 childAdded 返回现有/旧记录?

    我有一个查询 用 swift 编写 FIRDatabase database reference withPath ORDERS PATH lId child orders observe childAdded with firebaseS
  • Bash sqlite3 行 |如何转换为JSON格式

    我想将数据库中的 sqlite 数据转换为 JSON 格式 我想使用这个语法 sqlite3 linemembers db 从成员LIMIT 3中选择 gt members txt OUTPUT id 1 fname Leif gname
  • TensorFlow 图像分类

    我对 TensorFlow 很陌生 我正在做图像分类使用我自己的训练数据库 然而 在我训练了自己的数据集之后 我不知道如何对输入图像进行分类 这是我的代码准备我自己的数据集 filenames 01 jpg 02 jpg 03 jpg 04
  • 下载极大文件时连接关闭

    我们有一个提供文件的网络服务 最近 我们遇到一个非常大的文件 超过 2 GB 无法复制到缓冲区中 我修改了代码以使用HttpCompletionOptions ResponseHeadersRead不使用缓冲区并直接复制到流 然而 大多数时
  • 如何防止部分视图中的脚本多次加载并在同一页面中多次使用部分时导致错误

    在 ASP NET MVC 中 我创建了一个局部视图 该视图在同一页面上呈现两次 我的问题是JavaScript 被包含的次数与分部视图的次数一样多JavaScript 不喜欢重新定义类 我的问题是 如何将 JavaScript 包含在部分
  • Page_ClientValidate() 问题

    function Subscribe if typeof Page ClientValidate function Page ClientValidate if Page IsValid do something CheckUser 该脚本
  • django 管理操作而不选择对象

    是否可以为 django 管理员创建一个自定义管理操作 而不需要选择某些对象来运行它 如果您尝试在不选择对象的情况下运行操作 您会收到以下消息 Items must be selected in order to perform actio
  • tsc 未被识别为内部或外部命令

    我从 VSCode 0 10 6 更新到 0 10 8 并第一次尝试使用 Typescript 不幸的是 当我告诉 VSCode 构建时 我收到错误 tsc 不被识别为内部或外部命令 以下是相关详情 I created a fresh He
  • 如何采用按单独列排序的 DISTINCT ON 子查询并使其快速?

    又名 查询和数据与问题非常相似 选择按某列排序且在另一列上不同的行 https stackoverflow com questions 9796078 selecting rows ordered by some column and di
  • 如何在 Angular 8 或 9 中发出同步 HTTP 请求(发出请求并等待)

    有三个按钮 单击第一个Request HTTP Data As Promise按钮获取其 HTTP 响应作为Promise 第二Request HTTP Data As Observable按钮的响应为Observable 这两个按钮都使用
  • 网页推荐系统

    我正在尝试构建一个推荐系统 该系统会根据用户的操作 谷歌搜索 点击 他还可以明确地对网页进行评分 向用户推荐网页 为了了解谷歌新闻的做法 它会显示来自网络的有关特定主题的新闻文章 用技术术语来说就是集群 但我的目标是相似的 它将是基于用户操
  • 无法在 OS X 上的 Visual Studio Code 中运行命令

    所以我已经启动并运行了 Visual Studio Code 据我所知 我已经安装了所有先决条件 我能够创建一个 ASP NET 5 项目并通过在中键入 dnx web 来运行该网站我的终端 所有这些都有效 我遇到的问题来自 Visual
  • 在 JUnit 中删除文件和目录

    我正在为在目录中创建文件的方法编写测试 我的 JUnit 测试如下所示 Before public void setUp objectUnderTest new ClassUnderTest assign another directory
  • Chrome 打包应用程序具有 onblur 侦听器

    Chrome 打包应用程序是否有任何事件侦听器来判断应用程序是否失去焦点 我正在尝试制作一款游戏 但当我改变焦点时 我似乎无法使其暂停 我尝试了一些不同的方法 例如以下方法 但似乎都不起作用 document onblur pause do
  • 在本地计算机上有效但在服务器上无效的命令?

    我的桌面使用 ubuntu 10 04 服务器使用 Ubuntu 10 04 服务器版本 以下命令 sudo pip install e git http github com facebook python sdk git egg fac
  • 实现接口的数组的隐式类型

    我的印象是 C 编译器将根据它们都可以隐式转换为的类型隐式键入一个数组 编译器生成未找到隐式类型数组的最佳类型 public interface ISomething public interface ISomething2 public