在C#中是否有一个运算符像Groovy中的安全导航运算符那样?安全导航运算符的最佳实现是什么
例如,在groovy中,如果SessionData.CurrentSeminar为null,则执行此类操作将防止它发生NullPointerException。
int respId = SessionData.CurrentSeminar?.SeminCbaRespId;
这是如何用C#完成的?
在C#中是否有一个运算符像Groovy中的安全导航运算符那样?安全导航运算符的最佳实现是什么
例如,在groovy中,如果SessionData.CurrentSeminar为null,则执行此类操作将防止它发生NullPointerException。
int respId = SessionData.CurrentSeminar?.SeminCbaRespId;
这是如何用C#完成的?
该运算符在C#中不存在。你可以用内联的方式做 - 如果
int respId = SessionData.CurrentSeminar != null ?
SessionData.CurrentSeminar.SeminCbaRespId : default(int);
或作为扩展方法。
var respId = SessionData.CurrentSeminar.GetSeminCbaRespId();
public static int GetSeminCbaRespId(this typeofCurrentSeminar CurrentSeminar)
{
return CurrentSeminar != null ? CurrentSeminar.SeminCbaRespId : default(int);
}
这似乎是一个很好的解决方法,谢谢。我们厌倦了C#中不存在这样一个完美的运算符。 – kbaccouche 2012-04-16 13:10:29
http://connect.microsoft.com/VisualStudio/feedback/details/192177/a-bit-more-c-syntactic-sugar-for-nulls – 2012-04-16 13:11:47
并没有什么是完美的。 – 2012-04-16 13:12:53
也许这样的解决方法?
int respId= ReferenceEquals(SessionData.CurrentSeminar,null)?-1:SessionData.CurrentSeminar.SeminCbaRespId;
这里没有操作员,但可以关闭。尝试从一个this answer:
int respId = SessionData.CurrentSeminar.NullOr(s => s.SeminCbaRespId) ?? 0;
这得到,如果你需要几个连锁它们额外有用:
var elem = xml.Element("abc")
.NullOr(x => x.Element("def"))
.NullOr(x => x.Element("blah");
最接近的运营商?:
,但它不是含糖。
所以,你可以这样做:
int respId = SessionData.CurrentSeminar != null ? SessionData.CurrentSeminar.SeminCbaRespId : 0; // if 0 is the "null" value
你没有提到你想,如果CurrentSeminar为null,该值。你想要null还是0? – 2012-04-16 13:10:53