共用方式為


ExperimentalAttribute

備註

本文是功能規格。 規格可作為功能的設計檔。 其中包含建議的規格變更,以及功能設計和開發期間所需的資訊。 這些文章會發佈,直到提議的規格變更完成並併併入目前的ECMA規格為止。

功能規格與已完成實作之間可能有一些差異。 這些差異已記錄在相關的 語言設計會議(LDM)備忘錄中。

您可以在 規範的文章中深入瞭解將功能規範納入 C# 語言標準的過程。

報告以標記之型別和成員參考的 System.Diagnostics.CodeAnalysis.ExperimentalAttribute警告。

namespace System.Diagnostics.CodeAnalysis
{
    [AttributeUsage(AttributeTargets.Assembly |
                    AttributeTargets.Module |
                    AttributeTargets.Class |
                    AttributeTargets.Struct |
                    AttributeTargets.Enum |
                    AttributeTargets.Constructor |
                    AttributeTargets.Method |
                    AttributeTargets.Property |
                    AttributeTargets.Field |
                    AttributeTargets.Event |
                    AttributeTargets.Interface |
                    AttributeTargets.Delegate, Inherited = false)]
    public sealed class ExperimentalAttribute : Attribute
    {
        public ExperimentalAttribute(string diagnosticId)
        {
            DiagnosticId = diagnosticId;
        }

        public string DiagnosticId { get; }
        public string? UrlFormat { get; set; }
        public string? Message { get; set; }
    }
}

報告診斷

雖然診斷在技術上是一個警告,因此編譯程式允許隱藏它,但它會被視為報告目的的錯誤。 如果診斷未隱藏,這會導致組建失敗。

針對類型或成員的任何參考,報告診斷為下列任一類型或成員:

  • 以屬性標示,
  • 在以 屬性標示的元件或模組中,

除非參考發生在成員內 [Experimental] ,否則會自動隱藏它。

您也可以透過一般方式隱藏診斷,例如明確的編譯程式選項或 #pragma
例如,如果 API 標示為 [Experimental("DiagID")][Experimental("DiagID", UrlFormat = "https://example.org/{0}")],則可以使用 #pragma warning disable DiagID隱藏診斷。

如果提供給實驗屬性的診斷標識碼不是 有效的 C# 識別碼,就會產生錯誤。

如果未提供 屬性的值 Message ,診斷訊息是特定訊息,其中 '{0}' 是完整類型或成員名稱。

'{0}' is for evaluation purposes only and is subject to change or removal in future updates.

如果提供 屬性的值 Message ,診斷訊息是特定訊息,其中 '{0}' 是完整類型或成員名稱,而 '{1}'Message

'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.

屬性不是繼承自基底類型或覆寫成員。

ObsoleteAttribute 和 DeprecatedAttribute

[Experimental]警告會在 或 [Obsolete] 成員內[Deprecated]回報。
[Obsolete] 的警告和錯誤[Deprecated]會在成員內[Experimental]報告。
但是,如果有多個屬性,則會報告 和 [Obsolete] 的警告和錯誤[Deprecated],而不是 [Experimental]