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 operatorの構文が間違っています。

への変更。

@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

エラー メッセージを詳しく見てみましょう。

演算子 || boolまたはint型のオペランドには適用できません

そしてあなたのコード:

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

|| を適用しています bool (@item.TotalImages == 1) および int (5) への演算子。「True or 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

「||」の間 常にブール値 (true / false) に変換できる式である必要があります。

@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 に答える