c # условная и инклюзивная логическая структура потока - PullRequest
0 голосов
/ 10 июня 2011

Я работаю на странице asp.net и мне нужно вывести html на основе числового значения.

Логика такова:

Если ReferenceCount больше 13, товыведите Div-1:

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());

Если ReferenceCount больше 16, то выведите Div-1 и Div-2:

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());
Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault());

Если ReferenceCount больше чем17, затем выведите Div-1, Div-2 и Div-3:

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());
Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault());
Html.RenderPartial("Banner", Model.tweets.FirstOrDefault());

Если ReferenceCount больше 22, то выведите Div-1, Div-2 и Div-3 и Div-4:

Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());
Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault());
Html.RenderPartial("Banner", Model.tweets.FirstOrDefault());
Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());

и т. Д., В общей сложности еще 27 оценок ...

У кого-нибудь есть хорошие идеи, как структурировать этот логический поток так же эффективно,возможно?

Я бы предпочел не иметь так много операторов if, и я рассмотрел оператор Switch, который позволил бы вам пройти через различные тесты Case, но, похоже, вы не можете иметь выражения вПримеры использования Switch в C #.

Спасибо, Скотт

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Если у вас действительно есть этот шаблон, вы должны абстрагировать его в нечто вроде этого:

class TweetSetting
{
    public int MinReferenceCount { get; protected set; }
    public string ViewName { get; protected set; }

    public TweetSetting(int minReferenceCount, string viewName)
    {
        MinReferenceCount = minReferenceCount;
        ViewName = viewName;
    }
}

…

var settings =
    new[]
    {
        new TweetSetting(13, "Tweet"),
        new TweetSetting(16, "TShirt"),
        new TweetSetting(17, "Banner"),
        new TweetSetting(22, "Tweet")
    };

var referenceCount = …; // whatever

foreach (var setting in settings)
{
    if (referenceCount <= setting.MinReferenceCount)
        break;

    Html.RenderPartial(setting.ViewName, Model.tweets.FirstOrDefault());
}

Таким образом, если что-то меняется, вы просто изменяете settings. Еще лучше: вы можете загрузить его из файла настроек, и изменение не потребует изменения кода вообще.

0 голосов
/ 10 июня 2011

Если каждое утверждение просто добавляет дополнительную строку, то я бы сделал что-то вроде этого

if (refcount > 13)
    Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());
if (refcount > 16)
    Html.RenderPartial("TShirt", Model.tweets.FirstOrDefault());
if (refcount > 17)
    Html.RenderPartial("Banner", Model.tweets.FirstOrDefault());
if (refcount > 22)
    Html.RenderPartial("Tweet", Model.tweets.FirstOrDefault());

Таким образом, вы не будете так много повторять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...