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

asp.net mvc 2-c条件&;包含逻辑流结构

如果你真的有这个模式,你应该把它抽象成这样的东西:

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

这样你就不会重复太多了。