AppContext.TryGetSwitch(String, Boolean) メソッド

定義

スイッチの値の取得を試みます。

public:
 static bool TryGetSwitch(System::String ^ switchName, [Runtime::InteropServices::Out] bool % isEnabled);
public static bool TryGetSwitch (string switchName, out bool isEnabled);
static member TryGetSwitch : string * bool -> bool
Public Shared Function TryGetSwitch (switchName As String, ByRef isEnabled As Boolean) As Boolean

パラメーター

switchName
String

スイッチの名前です。

isEnabled
Boolean

このメソッドが返されるときに switchName が見つかった場合、switchName の値が含まれます。switchName が見つからなかった場合は false。 このパラメーターは初期化せずに渡されます。

戻り値

switchName が設定され、isEnabled の引数にスイッチの値が含まれている場合は true。それ以外の場合は false

例外

switchNamenullです。

switchNameEmpty です。

次の例では、ライブラリ コンシューマーが という名前 Switch.AmazingLib.ThrowOnExceptionのスイッチを設定しているかどうかを判断します。

public class AmazingLib
{
   private bool shouldThrow;

   public void PerformAnOperation()
   {
      if (!AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", out shouldThrow)) {
         // This is the case where the switch value was not set by the application.
         // The library can choose to get the value of shouldThrow by other means.
         // If no overrides or default values are specified, the value should be 'false'.
         // A false value implies the latest behavior.
      }

      // The library can use the value of shouldThrow to throw exceptions or not.
      if (shouldThrow) {
         // old code
      }
      else {
          // new code
      }
   }
}
module AmazingLib =
    let performAnOperation () =
        match AppContext.TryGetSwitch "Switch.AmazingLib.ThrowOnException" with
        | false, _ ->
            // This is the case where the switch value was not set by the application.
            // The library can choose to get the value of shouldThrow by other means.
            // If no overrides or default values are specified, the value should be 'false'.
            // A false value implies the latest behavior.
            ()
        | true, shouldThrow ->
            // The library can use the value of shouldThrow to throw exceptions or not.
            if shouldThrow then
                // old code
                ()
            else
                // new code
                ()
Public Class AmazingLib

   Private shouldThrow As Boolean

   Public Sub PerformAnOperation()
      If Not AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", shouldThrow) Then 
         ' This is the case where the switch value was not set by the application. 
         ' The library can choose to get the value of shouldThrow by other means. 
         ' If no overrides or default values are specified, the value should be 'false'. 
         ' A false value implies the latest behavior.
      End If

      ' The library can use the value of shouldThrow to throw exceptions or not.
      If shouldThrow Then
         ' old code
      Else 
          ' new code
      End If
   End Sub
End Class

注釈

AppContextクラスを使用すると、ライブラリ ライターは、ユーザーの新機能に対して統一されたオプトアウト メカニズムを提供できます。 これにより、オプトアウト要求を伝達するために、コンポーネント間に疎結合のコントラクトが確立されます。 通常、この機能は既存の機能が変更されるときに重要となります。 それに対して、新しい機能には暗黙のオプトインが既に存在しています。

共通言語ランタイムは、レジストリとアプリケーションの構成ファイルを AppContext 読み取ることによって、インスタンスに割り当てられたスイッチを自動的に設定します。 これらのスイッチの値をオーバーライドし、 メソッドを呼び出して新しいスイッチを SetSwitch 追加できます。

ライブラリは メソッドをTryGetSwitch呼び出して、コンシューマーがスイッチの値を宣言したかどうかをチェックし、それに対して適切に動作します。 既定では、スイッチが定義されていない場合は、新しい機能が有効になります。 スイッチが定義され、その値が の場合、 false新しい機能も有効になります。 その値が の場合、 trueレガシ動作が有効になります。

適用対象

こちらもご覧ください