c# - 为什么条件语句需要强制转换?

标签 c# oop interface casting conditional-operator

Possible Duplicate:
Ternary Expression with Interfaces as a Base Class

类(class):

interface ISms {
  void f_SendSms();
}

class SmsVodafone : ISms {
  public void f_SendSms(){
        // ...
  }
}

class SmsClickatell : ISms {
  public void f_SendSms(){
        // ...
  }
}

这有效:

ISms sms = null;
if (string.IsNullOrEmpty(_bilgi.M_Originator))
{
    sms = new SmsVodafone();
}
else
{
    sms = new SmsClickatell();
}

这也有效:

ISms sms = null;
sms = string.IsNullOrEmpty(_bilgi.M_Originator)
        ? (ISms) new SmsVodafone()
        : new SmsClickatell();

这不起作用:

ISms sms = null;
sms = string.IsNullOrEmpty(_bilgi.M_Originator)
          ? new SmsVodafone()
          : new SmsClickatell();

为什么?

最佳答案

在三元表达式中 a ? b : c,表达式 bc 必须可转换为相同类型,且必须是 b 的类型之一type 或 c 的类型。

SmsVodafone 无法转换为 SmsClickatell,并且 SmsClickatell 也无法转换为 SmsVodafone。这就是您收到错误的原因。

关于c# - 为什么条件语句需要强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923652/

相关文章:

c# - 按句点将字符串格式化为 3 位数字组

c# - 如何在不使用数组的情况下仅拆分一个字符串

c# - 使用 C# API 将 Google BiqQuery 结果导出到 Google Sheets 的最佳方法

java - 从 'getter' 方法返回值的最佳方法

德尔福Rtti : Explore properties of interfaces?

c# - 文件上传到 Web API 和 Azure 抛出 HttpException

python - 为什么我得到一个错误,该错误是指我的类(class)圈子中不存在的对象?

c# - 创建一个支持不同单位(摄氏度、华氏度、开尔文)的温度类

java - 对类型 `List<Iterable<Object>>` 的列表进行排序

c# - 理解 IoC 与依赖注入(inject)时遇到的问题