2016-05-21 13 views
0

私のクラスである:割り当て条件値が

namespace My.Core 
{ 
    public static class Constants 
    { 
     public const string Layer_ver_const = "23"; 

     public const string apiHash_const = "111111"; 
    } 
} 

は、今私は、apiHash_constのための条件値を設定したいです。
平均:

if(Layer_ver_const == "23") 
{ 
    apiHash_const = "111111"; 
} 
else if(Layer_ver_const == "50") 
{ 
    apiHash_const = "222222"; 
} 
else 
{ 
    apiHash_const = "333333"; 
} 

私はそれをどのように行うことができますか?

+6

'Layer_ver_const'が定数の場合、他の値はどのように設定されますか? –

+0

私は多くのHash_codesを持っています。私はcalssで手動でバージョンを変更したい、このクラスはHash_codeを返します。 – MoonLight

+3

「派生した」定数を 'static readonly'に変更し、それらを静的コンストラクタに設定する必要があります。 –

答えて

2

私は実行時にそれを行うことはできません。しかし、常に定数のキーワードをstaticまたはstatic readonlyに変更することができ、このコードは機能します。

public static class Constants 
{ 
    public const string Layer_ver_const = "23"; 

    public static readonly string apiHash_const; 

    static Constants() 
    { 
     if(Layer_ver_const == "23") 
     { 
     apiHash_const = "111111"; 
     } 
     else if(Layer_ver_const == "50") 
     { 
     apiHash_const = "222222"; 
     } 
     else 
     { 
     apiHash_const = "333333"; 
     } 
    } 
} 

あなたはconstantstatic readonlyチェックアウトの違いにこのリンクをお知りになりたい場合は:他の回答として

Static readonly vs const

1

私は読み取り専用フィールドにこれらを回すことをお勧めします、と

定数が異なる獣ですコンストラクタ内でそれらを設定します。あるプロジェクトで定数が宣言されると、それを参照する他のすべてのプロジェクトは、プロジェクトを再構築するまで定数の値を保持します。したがって、定数を変更することは、あなたがしたいことではありません。

これらを読み取り専用にして、コンストラクタの内側に設定します。

0

が指定されている、あなたはおそらく代わりにreadonlyフィールドをしたいです。あなたは財産を使うことさえできます。それにもかかわらず、はそれを定数式を計算式全体を作ることによって、フィールドconstを持つこと可能です:

public const string Layer_ver_const = "23"; 
public const string apiHash_const = 
    Layer_ver_const == "23" ? "111111" : 
    Layer_ver_const == "50" ? "222222" : 
    "333333" 
; 

これは、我々はapiHash_constを割り当てるための簡単な式を構築することができる唯一のため可能です。より複雑なシナリオでは、readonlyフィールドを解決する必要があります。

関連する問題