1

目標

a 内でいくつかの変数を宣言し、switchそれを外部で使用します。

問題

構文がわかりません。

私が考えていること

私の問題を実行するために、私はこのようなことを考えていましたが、それは単なる哲学であるため機能しません:

public ActionResult Compare(int id, string orderBy)
{
    var productsList = Products.BuildIndividualProductComparisonList(id);
    var product = Products.BuildToCompare(id);


        switch (orderBy)
        {
            case "lowestToBiggest":
                var organizedProductsList = 
                    productsList.OrderBy(x => x.minProductPrice);
                break;
            case "biggestToLowest":
                var organizedProductsList = 
                    productsList.OrderBy(x => x.maxProductPrice);
                break;
            default:
                var organizedProductsList = 
                    productsList.OrderBy(x => x.minProductPrice);
                break;
        }

    ComparisonViewModel comparisonViewModel =
        new ComparisonViewModel
        {
            Product = product,
            ProductList = organizedProductsList
        };

    return View(comparisonViewModel);
}

スポットライト

これはうまく機能する私の元のC#のコードです:

public ActionResult Compare(int id, string orderBy)
{
    var productsList = Products.BuildIndividualProductComparisonList(id);
    var product = Products.BuildToCompare(id);

    ComparisonViewModel comparisonViewModel =
        new ComparisonViewModel
        {
            Product = product,
            ProductList = productsList
        };

    return View(comparisonViewModel);
}

質問

誰かが私の問題を解決するアイデアを持っていますか?

4

5 に答える 5

7

スイッチ内でいくつかの変数を宣言し、それを外部で使用します。

できません。スコープ内で定義された変数は、そのスコープ内でのみ表示されます。

ステートメントの外側で変数を宣言するswitch必要があり、それを外側で使用できるようになります。

(Implicitly typed variable) を使用していることがわかりますが、ステートメントの外でvar宣言することはできません(それを割り当てる必要があるため)Eric Lippert からの回答switch

于 2013-07-29T14:12:27.027 に答える
5

switch ブロックの外側で変数を宣言し、それに値を代入します。またList、コレクション名にサフィックスを使用しないようにしてください。

IEnumerable<Product> sortedProducts;

switch (orderBy)
{
    case "lowestToBiggest":
        sortedProducts = products.OrderBy(x => x.minProductPrice);
        break;
    case "biggestToLowest":
        sortedProducts = products.OrderBy(x => x.maxProductPrice);
        break;
    default:
        sortedProducts = products.OrderBy(x => x.minProductPrice);
        break;
}

実際、コードは次のように単純化できます。

IEnumerable<Product> sortedProducts =
   products.OrderBy(p => orderBy == "biggestToLowest" ?
                         p.maxProductPrice : 
                         p.minProductPrice);
于 2013-07-29T14:18:04.867 に答える
1

変数の宣言をswitchブロックの外に置くだけです。varただし、型を推測できないため、使用する代わりに、宣言時に変数の型を指定する必要があります。

public ActionResult Compare(int id, string orderBy)
{
    var productsList = Products.BuildIndividualProductComparisonList(id);
    var product = Products.BuildToCompare(id);
    var organizedProductsList = null;


        switch (orderBy)
        {
            case "lowestToBiggest":
                organizedProductsList = 
                    productsList.OrderBy(x => x.minProductPrice);
                break;
            case "biggestToLowest":
                organizedProductsList = 
                    productsList.OrderBy(x => x.maxProductPrice);
                break;
            default:
                organizedProductsList = 
                    productsList.OrderBy(x => x.minProductPrice);
                break;
        }

    ComparisonViewModel comparisonViewModel =
        new ComparisonViewModel
        {
            Product = product,
            ProductList = organizedProductsList
        };

    return View(comparisonViewModel);
}
于 2013-07-29T14:12:24.453 に答える
0

変数OrganizedProductsListは、case ステートメントでのみスコープを持つため、case ステートメントの外で宣言する必要があります。

注: Products.BuildIndividualProductComparisonList(id) が何を返すかわかりません。製品のリストだと思います。

したがって、次のようなもの:

IEnumerable<Products> organizedProductsList = null;
switch (orderBy)
    {
        case "lowestToBiggest":
            organizedProductsList = 
                productsList.OrderBy(x => x.minProductPrice);
            break;
        case "biggestToLowest":
            organizedProductsList = 
                productsList.OrderBy(x => x.maxProductPrice);
            break;
        default:
            organizedProductsList = 
                productsList.OrderBy(x => x.minProductPrice);
            break;
    }
于 2013-07-29T14:24:07.110 に答える