C# 如何改进以下代码

C# 如何改进以下代码,c#,asp.net,C#,Asp.net,如果有可能改进以下代码,我会喜欢它 我必须在我的页面上下拉列表(显示每个类别),一个用于过滤帖子,另一个用于创建新帖子。代码如下: if (!IsPostBack) { ddlCategory.DataSource = BindDDlCategory(); if (!IsPostBack) { ddlCategory.DataTextField = "Name";

如果有可能改进以下代码,我会喜欢它

我必须在我的页面上下拉列表(显示每个类别),一个用于过滤帖子,另一个用于创建新帖子。代码如下:

if (!IsPostBack)
        {
            ddlCategory.DataSource = BindDDlCategory();
            if (!IsPostBack)
            {
                ddlCategory.DataTextField = "Name";
                ddlCategory.DataValueField = "Id";
            }
            ddlCategory.DataBind();

            if (ddlCategory.Items.Count == 0)
                ddlCategory.Items.Insert(0, new ListItem("Não há nenhuma categoria cadastrada", "108", true));
            else
                ddlCategory.Items.Insert(0, new ListItem("Todas as categorias", "108", true));

            ddlCategoryNP.DataSource = BindDDlCategory();
            if (!IsPostBack)
            {
                ddlCategoryNP.DataTextField = "Name";
                ddlCategoryNP.DataValueField = "Id";
            }
            ddlCategoryNP.DataBind();
            if (ddlCategoryNP.Items.Count == 0)
                ddlCategoryNP.Items.Insert(0, new ListItem("Não há nenhuma categoria cadastrada", "108", true));
            else
                ddlCategoryNP.Items.Insert(0, new ListItem("Escolha uma categoria", "108", true));
        }
分类的方法是:

protected DataTable BindDDlCategory()
        {
            Read readCategoryNP = new Read();
            return readCategoryNP.Category();
        }

readCategoryNP显示数据库中的DataTable

您的方法中有两个代码块执行绑定,它们与正在操作的ddl不同。为什么不创建一个将ddl作为参数的方法,然后对其应用绑定呢。DRY:)

我同意@Kemal的观点,这应该在代码审查中进行。这是我的2美分:

-- your code, reduced
if (!IsPostBack)
{
    var dataSource = BindDDlCategory();
    PrepareDDL(ddlCategory, dataSource);
    PrepareDDL(ddlCategoryNP, dataSource);
}

-- new method
private void PrepareDDL(DropDownList ddl, DataTable dataSource)
{
    ddl.DataSource = dataSource;
    ddl.DataTextField = "Name";
    ddl.DataValueField = "Id";
    ddl.DataBind();

    string message = ddl.Items.Count
        ? "Não há nenhuma categoria cadastrada"
        : "Todas as categorias";
    ddl.Items.Insert(0, new ListItem(message, "108", true));
}

-- and the existing method
protected DataTable BindDDlCategory()
{
    return new Read().Category();
}
也许:

if(!IsPostBack)
{
BindCategory();
}
受保护的无效BindCategory()
{
ddlcontegory.DataSource=binddlcontegory();
ddlcontegory.DataTextField=“Name”;
ddlcontegory.DataValueField=“Id”;
ddlcontegory.DataBind();
字符串aditionalItem=(ddlcegory.Items.Count==0)?“Não hánenhuma categoria cadastrada”:“Todas as categorias”
ddlcography.Items.Insert(0,新列表项(aditionalItem,“108”,true));
//由于两者都是相等的,请在此处绑定以避免再次调用binddlcontegory():
ddlCategoryNP.DataSource=binddlcontegory();
ddlCategoryNP.DataTextField=“Name”;
ddlCategoryNP.DataValueField=“Id”;
ddlCategoryNP.DataBind();
ddlCategoryNP.Items.Insert(0,新列表项(aditionalItem,“108”,true));
}

你应该使用代码评审:我不知道代码评审。我的错误。谢谢。如果你想重新发布,请确保包括工作代码和一些示例。