asp.net mvc 2-c条件&;包含逻辑流结构
本文关键字:包含逻 结构 amp net mvc 2-c 条件 asp | 更新日期: 2023-09-27 17:58:49
我正在开发一个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语句,它可以让你通过各种用例测试,但你似乎无法在C#中的Switches的Case语句中有表达式。
谢谢,Scott
如果你真的有这个模式,你应该把它抽象成这样的东西:
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());
这样你就不会重复太多了。