Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the question mark in member access mean in C#?

Tags:

operators

c#

null

Can someone please explain to me what does the question mark in the member access in the following code means?

Is it part of standard C#? I get parse errors when trying to compile this file in Xamarin Studio.

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));

AnalyzerFileReference.cs line 195

like image 676
Wickoo Avatar asked Oct 01 '14 13:10

Wickoo


2 Answers

It is Null Propagation operator introduced in C# 6, it will call the method only if object this.AnalyzerLoadFailed is not null:

this.AnalyzerLoadFailed?.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));

is equal to :

if( this.AnalyzerLoadFailed != null)
    this.AnalyzerLoadFailed.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));

See C# 6.0 – Null Propagation Operator , also you can see here

i also once wrote about this upcoming feature in c# 6 here

like image 163
Ehsan Sajjad Avatar answered Nov 08 '22 11:11

Ehsan Sajjad


In C# version 6 it will be shorthand for

if (this.AnalyzerLoadFailed != null)
    this.AnalyzerLoadFailed.Invoke(this, new AnalyzerLoadFailureEventArgs(AnalyzerLoadFailureEventArgs.FailureErrorCode.NoAnalyzers, null, null));
like image 25
Andrey Korneyev Avatar answered Nov 08 '22 11:11

Andrey Korneyev