4

プロジェクトのプレフィックス テキスト値を作成しようとしています。そのためにスイッチケースを使用しています。ユーザーが関連するラジオ ボタンを選択すると、接頭辞の値を指定する必要があります。

「switch ()」の後に何を付ければいいですか

ユーザー選択による値はブール値です。出力は文字列です。

どんな助け..

 public string officePostfix()
  {
   string postfix = null;
     switch (...)
        {
            case SheetMgrForm.Goldcoast = true:
                postfix = "QLD";
                break;
            case SheetMgrForm.Melbourne = true:
                postfix = "MEL";
                break;
            case SheetMgrForm.Sydney = true:
                postfix = "SYD";
                break;
            case SheetMgrForm.Brisbane = true:
                postfix = "BIS";
                break;
        }
        return postfix;
     }
4

5 に答える 5

4

もう 1 つの方法は、列挙を使用して領域を定義し、これらをリソース ファイルにマップすることです。これにより、ローカリゼーションや将来のさらなる拡張など、より保守しやすくなり、リストが長い場合、つまり、T4 を介して列挙型とリソースの作成を自動化する場合、または Web サービスにクエリを実行する必要がある場合などに役立ちます。 .

たとえば、AreaPostfixesリソース ファイルとArea列挙型があるとします。

public enum Area
{
     Goldcoast,
     Melbourne,
     // ...
}

public static class AreaExtensions
{  
    public static string Postfix(this Area area)
    {
        return AreaPostfixes.ResourceManager.GetString(area.ToString());
    }
}

// AreaPostfixes.resx
Name       Value
Goldcoast  QLD
Melbourne  MEL

// Usage
public string GetPostfix(Area area)
{
    return area.Postfix();
}

これにより、スイッチなどの必要がなくなります。確実にする必要があるのは、各列挙型とリソースに 1:1 のマッピングがあることだけです。これは単体テストで行いますが、GetString が Postfix 拡張メソッドで null を返す場合、Assert を配置したり、例外をスローしたりするのは簡単です。

于 2013-05-21T05:48:59.073 に答える
0

これはおそらくあなたの望む結果を返すでしょうが、それは一種の醜い力ずくの方法です。ケース部分は、ある種の定数値を期待しています。この場合、「case true:」または「case false:」になります (ただし、この場合、これをどうするかはわかりません)。

public string officePostfix()
{
    string postfix = null;
    switch (SheetMgrForm.Goldcoast == true)
    {
        case true:
            postfix = "QLD";
            break;
    }
    switch(SheetMgrForm.Melbourne == true)
    { 
        case true:
            postfix = "MEL";
            break;
    } 
    switch (SheetMgrForm.Sydney == true)
    {
        case true:
            postfix = "SYD";
            break;
    }     
    switch(SheetMgrForm.Brisbane == true)
    {
        case true:
            postfix = "BIS";
            break;
    }
        return postfix;
}
于 2018-11-28T16:19:14.583 に答える