none
請問 "?." 是什麼意思? RRS feed

  • 問題

  • 由於工作需要,我要閱讀C#程式碼,最近遇到一個問題,在此請教先進:

            public void OnServerStopped()
            {
                Log.Debug("OnServerStopped: begin.");

                ServerDisconnected?.Invoke(this, EventArgs.Empty);

                Log.Debug("OnServerStopped: end.");
            }

    ServerDisconnected?.Invoke(this, EventArgs.Empty);

    這行程式碼裡面"?."代表什麼意義, "??", "?"運算子我知道,但是就是看不懂"?.",去Google找不到(或許是我關鍵字下太爛了)

    2017年8月26日 上午 02:49

解答

  • 原 po 的寫法是 "Null 條件運算子".

    以他的內容所示

    ServerDisconnected?.Invoke(this, EventArgs.Empty);

    表示 ServerDisconnected 若不是 null 則執行 ServerDisconnected.Invoke(this, EventArgs.Empty);

    其他詳見 MSDN 文件庫 Null 條件運算子


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年8月26日 上午 05:42
    版主

所有回覆

  • 在C#中「?」有三種用法,提供一下使用的範例技巧:

    範例一(可空類型修飾符(?)): int? number;

    ?(單問號),是System.Nullable<T>的縮寫形式,可null類型。

    所以int?,它的解釋就是編譯後便是System.Nullable<int>的形式。


    範例二(三元(運算符)表達式(?:)): t.Text.Trim().Length == 0 ? null : t.Text.Trim()

    ? 為三元運算符,就等於是:  

    if (t.Text.Trim().Length == 0)
    {
        取 null;
    }
    else
    {
        取 t.Text.Trim();
    }


    範例三(空合併運算符(??)):a??0

    ??(雙問號),意思是取所賦值??左邊的,如果左邊為null,取所賦值??右邊的,所以上面例子等於是

    if (a==null)
    {
       取 0;        
    }
     else
    {
       取 a;
    }


    不過你那段範例寫法應該不會這樣寫,你這樣寫編譯應該不會過才是。



    2017年8月26日 上午 03:39
  • 原 po 的寫法是 "Null 條件運算子".

    以他的內容所示

    ServerDisconnected?.Invoke(this, EventArgs.Empty);

    表示 ServerDisconnected 若不是 null 則執行 ServerDisconnected.Invoke(this, EventArgs.Empty);

    其他詳見 MSDN 文件庫 Null 條件運算子


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年8月26日 上午 05:42
    版主
  • 了解,感謝解答。
    2017年8月26日 下午 02:26
  • @@我看它上面是2017/7/29的@@是新的用法嗎???我看我的編輯器過不去。
    2017年8月27日 下午 04:02
  • C# 6.0

    https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-6


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2017年8月27日 下午 05:00
    版主
  • 果然不算是太久的資訊,我剛好用到一台還是安裝舊的Visual Studio(難怪我跑他的Code會報錯),也算是學到一招了,感謝Bill Chung的資訊提供。
    2017年8月28日 上午 04:12