我正在使用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的Case语句中使用表达式在C#。
谢谢, 斯科特
答案 0 :(得分:1)
如果你真的有这种模式,你应该把它抽象成这样的东西:
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
即可。更好的是:您可以从设置文件中加载它,并且修改根本不需要更改代码。
答案 1 :(得分:0)
如果每个语句只是添加一个额外的行,那么我会做这样的事情
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());
这样你就不会那么重复自己了。