2

这是情况:

if count items is either 0,1,5,7,8,9,10 then string = "string one"
if count items is either 2,3,4 then string = "string two"

我试过(在cs razor视图中)

@if (@item.TotalImages == 1 || 5 || 7 || 8 || 9 || 10)
{
   string mystring = "string one"
}

但我收到了这个错误

运算符 || 不能应用于 bool 或 int 类型的操作数

4

7 回答 7

7

or 运算符的语法错误。

改成。

@if (@item.TotalImages == 1 || @item.TotalImages == 5)
{
   string mystring = "string one"
}
于 2012-12-28T09:09:49.073 回答
6

也许

var accepted = new HashSet<int>(new[] {1, 5, 7, 8, 9, 10});

@if (accepted.Contains(item.TotalImages))
{
   string mystring = "string one"
}
于 2012-12-28T09:15:29.640 回答
4

对于In这样的情况,扩展方法可能是一种语法糖:

public static class CLRExtensions
{
    public static bool In<T>(this T source, params T[] list)
    {
        return list.Contains(source);
    }
}

所以基本上你可以简单地写而不是使用 multiple or operator

@if (@item.TotalImages.In(1, 5, 7, 8, 9, 10)
{
}
于 2012-12-28T09:20:57.107 回答
3

仔细查看错误消息:

运算符 || 不能应用于boolint类型的操作数

你的代码:

@if (@item.TotalImages == 1 || 5)

您正在申请 || 运算符为 bool (@item.TotalImages == 1) 和 int (5)。“真或 5”没有意义。'False or 5' 也没有

基本上,您需要做的就是制作 || 的两面。运算符布尔值。

@if (@item.TotalImages == 1 || @item.TotalImages == 5)

(当然)还有很多其他聪明的方法可以做到这一点,但这可能是最直接的。

于 2012-12-28T09:12:58.970 回答
1

如果您想检查所有这些可能性,您可能会得到一个非常大的“if”语句。使用 LINQ 的更简洁的方法是:

@if ((new List<int>{ 0, 1, 5, 7, 8, 9, 10 }).Contains(@item.TotalImages))
{
    string mystring = "string one"
}

这样,您可以更轻松地查看和维护要检查的数字列表(或者,实际上是从其他地方传递它们)。

于 2012-12-28T09:15:12.103 回答
0

我会使用开关:

@switch (@item.TotalImages)
{
    case 0:
    case 1:
    case 5:
    case 7:
    case 8:
    case 9:
    case 10:
        s = "string one";
        break;
    case 2:
    case 3:
    case 4:
        s = "string two";
        break;
    default:
        throw new Exception("Unexpected image count");
}

奇怪的是,没有人推荐一本字典:

private string stringOne = "string one";
private string stringTwo = "string two";

private Dictionary<int, string> _map = new Dictionary<int, string>
{
    { 0, stringOne },
    { 1, stringOne },
    { 2, stringTwo },
    { 3, stringTwo },
    { 4, stringTwo },
    { 5, stringOne },
    { 7, stringOne },
    { 8, stringOne },
    { 9, stringOne },
    { 10, stringOne },
}

然后

@var s = _map[@item.TotalImages];

这种方法更容易看出,例如,您没有处理 TotalImages == 6 的情况。

于 2012-12-28T09:21:34.117 回答
0

“||”之间 always 必须是一个表达式,可以转换为布尔值(真/假):

@if (@item.TotalImages == 1 || @item.TotalImages == 5 || @item.TotalImages == 7 || @item.TotalImages == 8 || @item.TotalImages == 9 || @item.TotalImages == 10)
    {
       string mystring = "string one"
    }
@else @if(@item.TotalImages == 2 || @item.TotalImages == 3 || @item.TotalImages == 4)
    {
       string mystirng = "string two"
    }
于 2012-12-28T09:52:38.990 回答