簡體   English   中英

c# 條件和包含邏輯流程結構

[英]c# conditional & inclusive logic flow structure

我正在處理 asp.net 頁面,需要基於數值的 output html。

邏輯是這樣的:

如果 ReferenceCount 大於 13,則 output 一個 Div-1:

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

如果 ReferenceCount 大於 16,則 output 一個 Div-1 和一個 Div-2:

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

如果 ReferenceCount 大於 17,則 output 一個 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,則 output 一個 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 測試,但你似乎無法在 C# 中的 Switch 的 Case 語句中使用表達式。

謝謝,斯科特

如果你真的有這種模式,你應該把它抽象成這樣的東西:

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 更好的是:您可以從設置文件中加載它,並且修改根本不需要更改代碼。

如果每個語句只是添加一個額外的行,那么我會做這樣的事情

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());

這樣你就不會重復自己了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM