[英]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.