【问题标题】:Why conditional statement needs cast? [duplicate]为什么条件语句需要强制转换? [复制]
【发布时间】:2012-04-12 23:57:13
【问题描述】:

可能重复:
Ternary Expression with Interfaces as a Base 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();

为什么?

【问题讨论】:

  • 我假设它是 C# - 如果我错了,请更改标签
  • 我认为在最后一个代码示例中,您打算删除 (ISms)
  • 我看不出你的第二个和第三个例子有什么区别?!
  • 一定是错字,但我看不出第二个和第三个代码示例有什么区别
  • 请参阅链接为重复的问题中的my answer

标签: c# oop interface casting conditional-operator


【解决方案1】:

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

SmsVodafone 不能转换为 SmsClickatellSmsClickatell 不能转换为 SmsVodafone。这就是你得到错误的原因。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多