为什么条件语句需要演员?

时间:2012-03-29 10:34:31

标签: c# oop interface casting conditional-operator

  

可能重复:
  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();

为什么?

1 个答案:

答案 0 :(得分:3)

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

SmsVodafone无法转换为SmsClickatellSmsClickatell无法转换为SmsVodafone。这就是你收到错误的原因。