为什么条件语句需要强制转换

本文关键字:转换 条件 语句 为什么 | 更新日期: 2023-09-27 18:29:18

可能重复:
以接口为基类的三元表达式

类别:

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的类型或c的类型之一。

SmsVodafone不可转换为SmsClickatellSmsClickatell不可转换成SmsVodafone。这就是你出错的原因。