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
,表达式 b
和 c
必须可转换为相同类型,且必须是 b
的类型之一type 或 c
的类型。
SmsVodafone
无法转换为 SmsClickatell
,并且 SmsClickatell
也无法转换为 SmsVodafone
。这就是您收到错误的原因。
关于c# - 为什么条件语句需要强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923652/