From C#: https://msdn.microsoft.com/en-us/library/dn986595.aspx
The null-conditional operator, .? (and ?[] for lists), checks if a reference exists before trying to access the member.
// Syntax:
a?.b
a?[b]
// Of course, it can be chained
a?.b?.c?.d
// and used with procs
A()?.B()?.C()?.D()
// Examples:
var x = whatever?.variable
var y = whatevers?[index]
Whatever()?.Procedure()
// Current Equivalents:
// var whatever/whatever; /whatever has a "variable" var.
var x = whatever && whatever.variable
// Works as expected for list indexing.
// var list/whatevers
var y = whatevers && whatevers[index]
// The left-hand expression of ?. is only evaluated once.
// When typed procs are added, this should be typed.
var result = Whatever()
result && result:Procedure()