1

私は少しコードを持っていますが、それは単純ですが、おそらくそれが何をするかについてすぐには明らかではありません。

I found @(Model.Count() == 0 ? "no" : Model.Count().ToString()) @(Model.Count() == 1 ? "person" : "people")
@foreach (var item in Model) {
   <div>@item.Name at @item.Email</div>
}

そして、このようなコードをたくさん書く前に、これが良い方法かどうかを知りたかったのです。

したがって、問題は、.NET でこれを行うためのより良いフレームワークの方法があるか、または Ternary メソッドで問題ないかということです。

前提は明らかに

  • 0 レコード = 人が見つかりませんでした
  • 1 レコード = 1 人を見つけました
  • 2 件以上のレコード = 2 人が見つかりました
4

6 に答える 6

5

いくつかの場所でそれを行う場合、拡張メソッドは両方の問題(読みやすさと簡素化されたコード)を解決します

public static string PersonCountString(this IEnumerable<Person> personList)
{
    var count = personList.Count();
    return String.Format("{0} {1}", count > 0 ? count : "no",
                                    count == 1 ? "person" : "people");
}
...
I found (@Model.PersonCountString())
于 2013-04-24T10:56:37.080 に答える
1

あなたの質問に答えるには:いいえ、ワンライナーが読めないことがわかり@(() 0 ? "" : .().()) @(.() == 1 ? "" : "")ました.Count().

次のような (共有) ヘルパー メソッドを作成できます。

string GetCountWithDescription(int count, 
                               string singleItemDescription, 
                               string multipleItemsDescription)
{
    switch (count)
    {
        case 0:
            return "no " + multipleItemsDescription;
        case 1:
            return "1 " + singleItemDescription;
        default:            
            return count + " " + multipleItemsDescription;
    }
}

再利用も可能であるため、別のファイルに貼り付けて、コードが乱雑にならないようにすることができます。次のように、すべてのビューから簡単に呼び出すことができます。

@GetCountWithDescription(Model.Count(), "person", "people")
于 2013-04-24T10:56:20.253 に答える
0

何を達成しようとしていますか?読みやすさやコードの高速化 (開発)? 読みやすさが目的の場合は、三項演算を文字列内に保持することをお勧めします。次に例を示します。

string modelCountStr = Model.Count() == 0 ? "no" : Model.Count().ToString(); string modelPluralStr = Model.Count() == 1 ? "person" : "people";

于 2013-04-24T10:52:34.937 に答える
0

Count()ユーザーが存在する場合に使用する必要があることを考慮してください:

@{ 
    var count = Model.Count();
}

I found @(count == 0 ? "no" : count) @(count == 1 ? " person" : " people")
于 2013-04-24T10:53:34.920 に答える
0

可読性を高めるもう 1 つの方法は、可能であれば、関係する条件が少ないか、理想的にはゼロであるソリューションを選択することです。

これは私の見解です:

@{ 
    var count = Model.Count(); 
}
I found @string.Format(new[] { "no people", "{0} person", "{0} people"} [Math.Min(count, 2)], count)

おそらく、Math.Min がある種の分岐を担当していますが、これははるかに理解しやすいと思います。

于 2013-04-24T11:54:52.000 に答える