C#がcaseブロックにローカルスコープを持たないのはなぜですか?
私はこのコードを書いていました: private static Expression<Func<Binding, bool>> ToExpression(BindingCriterion criterion) { switch (criterion.ChangeAction) { case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x => x.Action == action); case BindingType.ExplicitValue: var action = (byte)ChangeAction.SetValue; return (x => x.Action == action); default: // TODO: Localize errors throw new InvalidOperationException("Invalid criterion."); } } そして、コンパイルエラーを見つけて驚いた: 「action」という名前のローカル変数がこのスコープで既に定義されています 解決するのは非常に簡単な問題でした。2番目の要素を取り除くだけでvarうまくいきました。 明らかに宣言された変数caseのブロックは親のスコープを持っているswitchが、私はこれが理由として興味があります。C#は、実行が(それは他のケースを落下することはできませんことを考える必要があり …