切换变量以在外部使用

Gui*_*nge 1 c#

目标

在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);
}
Run Code Online (Sandbox Code Playgroud)

聚光灯

这是我最初的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);
}
Run Code Online (Sandbox Code Playgroud)

这个问题

有人有任何想法解决我的问题吗?

Hab*_*bib 7

在交换机中声明一些变量并在外部使用它.

不能.范围内定义的变量只能在该范围内可见.

您必须在switch语句之外声明您的变量,然后您才能在外部使用它.

我看到你正在使用var(隐式类型变量)并且你不能在switch语句之外声明它(因为需要分配),你应该看到:在条件范围内声明隐式类型变量并在外部使用它并且Eric Lippert回答


Ser*_*kiy 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;
}
Run Code Online (Sandbox Code Playgroud)

实际上你的代码可以简化为:

IEnumerable<Product> sortedProducts =
   products.OrderBy(p => orderBy == "biggestToLowest" ?
                         p.maxProductPrice : 
                         p.minProductPrice);
Run Code Online (Sandbox Code Playgroud)