2015-01-02 11 views
16

I以下の列挙に持って活字体列挙型のスイッチ

enum EditMode { 
    View = 0, 
    Edit = 1, 
    Delete = 2 
} 

(デフォルトに直進する)のは、私は

var editMode = EditMode.Edit; 

がなぜ次のコードは動作しません列挙型の変数を持っていると仮定しましょう?

switch (editMode) { 
    case EditMode.Delete: 
     ... 
     break; 
    case EditMode.Edit: 
     ... 
     break; 
    default: 
     ... 
     break; 
    } 
+1

このコードはTypeScriptプレイグラウンドで機能します。スクリプトが正しい順序でロードされていますか? –

+0

私はそれがプレイグラウンドで動作することを確認することもできます。 –

+2

はい、それは問題はコード自体ではないようです。何らかの理由で私のコードは列挙型の背後にある数字ではなく数字に関連付けられた文字列を割り当てます。たとえば、isteadは1(編集) "1"です。なぜ私は理解できません。 – Mantzas

答えて

9

私はなぜそれが起こるかを知りました。コードのどこかに、このenumを文字列として渡す起動関数(私はdurandalを使用しています)があります(この関数は列挙型としてマークされていますが、それでも文字列です)。これが私のswitch文が失敗する理由です。私は単純に値を数値に変換して、すべてが期待通りに機能します。とにかくありがとう

+1

これは私にとっても問題でした。私のコンストラクタにはEnum型のパラメータがありましたが、外部の呼び出し元が文字列を渡していました。コンストラクタパラメータをstring型に変更し、EnumType [parameter]を使用して列挙型に変換しました。 – mfanto

22

私もこの問題がありました。回避策:スイッチの変数の前に+記号を追加します。つまり、

switch (+editMode) { 
    case EditMode.Delete: 
     ... 
     break; 
    case EditMode.Edit: 
     ... 
     break; 
    default: 
     ... 
     break; 
    } 
+1

これは、タイスクリプトのグリッチ/バグを修正する唯一の方法と思われます。 – Kokodoko

+1

+これは数字に変わりますが、それはうまくいくようです。私はこれが素晴らしい解決策のようには思えないと思う。私もenumの最初の項目を0に割り当てようとしましたが、それは助けになりませんでした。バグみたいです – nycynik

関連する問題