使用条件运算符时没有隐式转换[重复]

2024-02-22

我有以下课程:

abstract class AClass { }
class Foo : AClass { }
class Bar : AClass { }

当我尝试使用它们时:

AClass myInstance;
myInstance = true ? new Foo() : new Bar();

此代码将无法编译,因为“无法确定条件表达式的类型,因为‘CSharpTest.Class1.Foo’和‘CSharpTest.Class1.Bar’之间没有隐式转换”

但以下示例编译正常:

if (true)
{
    myInstance = new Foo();
}
else
{
    myInstance = new Bar();
}

这也可以:

myInstance = true ? (AClass) new Foo() : new Bar();

or

myInstance = true ? new Foo() : (AClass) new Bar();

为什么条件运算符和 if 子句的行为有如此大的差异?


这是预期的行为。

既然没有隐式转换X 和 Y 之间存在(即使它们共享公共基数,它们之间也没有隐式转换),您需要显式强制转换(至少)其中之一到基类,以便存在隐式转换。

来自C#规范的详细解释:

第二个和第三个操作数?:运算符控制条件表达式的类型。设 X 和 Y 为第二个和第三个操作数的类型。然后,

如果 X 和 Y 是相同类型,则这就是条件表达式的类型。

否则,如果存在从 X 到 Y 的隐式转换(第 6.1 节),但不存在从 Y 到 X 的隐式转换, 那么 Y 是条件表达式的类型。

否则,如果存在从 Y 到 X 的隐式转换(第 6.1 节),但不存在从 X 到 Y 的隐式转换, 那么 X 是条件表达式的类型。

否则,无法确定表达式类型,并且会发生编译时错误。

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

使用条件运算符时没有隐式转换[重复] 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • 如何解决 CALayer 支持的文本中文本渲染不佳的问题

    我有一些可变文本NSTextField呈现在CALayer背景视图 作为一个CALayer不支持其上任何文本的文本渲染的子像素别名 该文本看起来很垃圾 一些谷歌搜索揭示了其原因 并且文本必须渲染到不透明背景上才能启用 SPA 在这种情况下
  • 在 PHP 中发送 HTTP 响应代码的最佳方法

    通过阅读 php 规范和 Stack Overflow 上的其他问题 我可以看到从 PHP 发送 HTTP 响应代码的三种方法 header HTTP 1 0 404 Not Found A B C header false 404 C D
  • JavaScript 有时在 android 的 webview 中不起作用

    我在我的应用程序中放置了一个 webview 来访问包含一些 JavaScript 函数的网页 我的目的是当用户单击网页中的链接时 它将在应用程序中启动一个新的活动 我写了 webSettings setJavaScriptEnabled
  • 如何在实际示例中使用 javascript 模块模式?

    我正在尝试理解 JavaScript 模块模式 我已经看过它应该是什么样子的示例 但我不明白如何使用它 例如 这里发生了一些事情 input share on click function loading html img class re
  • 无论大小如何,如何使项目保持在屏幕中央? [复制]

    这个问题在这里已经有答案了 我试图使这些框在屏幕上水平居中 无论视口的面积是多少 但我似乎无法做到这一点 如果有人可以提供帮助 我将不胜感激 div class jobFields div class field 1 div div cla
  • AngularJS - 触发控制器时获取先前的路线

    Angular 的内部结构再次让我困惑 我需要在加载特定视图时确定之前的路线 我就是这样做的 app controller TrashCtrl function scope rootScope rootScope on locationCh
  • 使用 Winsock 通过单个 UDP 服务器处理 10 个客户端

    我已经使用 UDP 套接字建立了一个服务器 客户端应用程序 但我的服务器无法一次处理多个客户端 现在我想修改我的应用程序 让 10 个客户端分别运行在不同的计算机上 而我的服务器运行在单独的计算机上 我希望我的服务器能够与 10 个不同机器
  • jquery.ui.touch.punch.js 脚本阻止触摸设备上的输入功能

    我花了一点时间 但我发现我无法单击我的输入 因为我使用 touch punch 脚本在触摸设备上启用 jquery UI 拖动功能 熟悉这个脚本的人知道为什么会这样吗 该表单实际上位于父对象的树中 有谁知道我可以覆盖或强制选择的方法吗 我现
  • 如何通过URL获取RouteData?

    我需要得到RoutData通过 ASP NET MVC 应用程序中给定的 URL 字符串 我找到了我需要嘲笑的方式HttpContextBase基于我的 URL 字符串 然后将其传递给RouteTable Routes GetRouteDa
  • IEEE 754 浮点除法的可逆性

    IEEE 754 浮点除法的可逆性是什么 我的意思是标准是否保证如果double y 1 0 x then x 1 0 y i e x可以一点一点精确还原吗 时的情况y is infinity or NaN都是明显的例外 是的 有 IEEE
  • Delphi 6 表单设置为使用 poDesktopCenter 定位自身,最终出现在“扩展”监视器上

    我有一个 Delphi 6 应用程序 它在主窗体出现后启动向导 向导是一种模态形式 我的一位用户将其 Windows 桌面扩展到了多个显示器 在这种情况下 主窗体显示在主监视器上 向导显示在扩展监视器上 这会造成混乱 因为当他们尝试单击主窗
  • 为什么要将 NSObject 协议附加到协议实现中

    我看到一些类似于以下内容的代码 protocol MyProtocol
  • 如何查找数据框中各组之间共享的值? [复制]

    这个问题在这里已经有答案了 我有一个整洁的 data frame 有两列 exp and val 我想找出哪些值val在所有不同的实验之间共享 df lt data frame exp c A A A A B B B B C C C C v
  • 找不到符号类“Builder”

    我最近下载了Android Studio 我认为它比eclipse 我创建了一个新项目 其中包含登录活动 但该活动似乎有错误 在此处输入图像描述 1 Error 78 31 error cannot find symbol class Bu
  • 递归读取文件夹并对每个文件夹执行命令

    我试图递归到文件夹 然后使用 bash 脚本在它们上运行命令 有什么建议么 如果您想递归到目录 对其中找到的每个文件执行命令 我会使用find我认为 命令 而不是使用 shell 脚本编写任何内容 该命令可以接收很多参数 例如type过滤返
  • XNA Content.Load 如何操作?

    我只是好奇它是否在每次调用时实际上将资源加载到内存中 或者如果它查找它 发现它是否已加载 如果未加载 则加载一次并仅保留引用 以便第二次调用它只是获取对它的引用 它会跟踪已加载的内容 并且如果之前已加载过该对象 则仅返回对同一对象的引用 这
  • OpenCV 和 Python - 图像太大而无法显示

    我的图像尺寸为 6400 3200 而我的屏幕为 1280 x 800 因此 仅需要调整图像大小以供显示 我正在使用 Python 和 OpenCV 2 4 9 根据OpenCV 文档 http docs opencv org 2 4 mo
  • Docker-compose 异常

    溢出 我尝试将 docker compose 脚本从我的 ubuntu 工作站传输到我的 Fedora 笔记本电脑 当击中时 docker compose up 我得到以下异常 polito localhost dev docker com
  • 为什么 Android Studio 无法引用仅包含在 build.gradle 中的库?

    在我的应用程序中 我使用 Guava 库 我在我的文章中引用了它build gradle文件仅如下 dependencies compile com google guava guava 13 0 1 我的应用程序重建并运行良好 然而 当我
  • 使用条件运算符时没有隐式转换[重复]

    这个问题在这里已经有答案了 我有以下课程 abstract class AClass class Foo AClass class Bar AClass 当我尝试使用它们时 AClass myInstance myInstance true