试图精简我的c#
本文关键字:我的 | 更新日期: 2023-09-27 18:06:49
我试图压缩我的c#代码,因为它太长了,我觉得我可以使用foreach循环。如果我的术语或词汇不正确,请原谅,我是一个小程序员,还在摸索。
我的代码片段:
if (sender == LinkButtonA)
{
Session["LastNameFilter"] = "A";
}
if (sender == LinkButtonB)
{
Session["LastNameFilter"] = "B";
}
if (sender == LinkButtonC)
{
Session["LastNameFilter"] = "C";
}
if (sender == LinkButtonD)
{
Session["LastNameFilter"] = "D";
}
等等……
基本上,它正在改变过滤器,以便我可以在RadGrid中显示我的"患者",并根据他们的姓氏过滤他们。但是正如你所看到的,我必须有26个if语句才能使它工作。这是一种更干净的方式吗?
您可以使用字典将按钮映射到过滤器:
static Dictionary<Button, string> mapping = new Dictionary<Button, string>() {
{ LinkButtonA, "A" },
{ LinkButtonB, "B" },
{ LinkButtonC, "C" },
{ LinkButtonD, "D" },
};
...
Session["LastNameFilter"] = mapping[sender];
在Dictionary<Button,string>
中注册您的按钮:
Dictionary<Button,string> lastNameFilterByButton = new Dictionary<Button,string>()`
mapping.Add(LinkButtonA, "A");
mapping.Add(LinkButtonB, "B");
mapping.Add(LinkButtonC, "C");
mapping.Add(LinkButtonD, "D");
// ...
Session["LastNameFilter"] = lastNameFilterByButton[sender]
将按钮的Tag属性设置为适当的字符串,然后将会话值设置为标签:
// in the designer file
LinkButtonA.Tag = "A";
LinkButtonB.Tag = "B";
// etc.
// in the event
var btn = sender as LinkButton;
if (btn != null)
Session["LastNameFilter"] = (string)btn.Tag;
编辑:标签是在WinForms控件上发现的,ASP控件没有直接的等价物。你可能可以安全地使用CommandArgument属性,虽然,如果你不使用它的其他任何东西(如Jason Nesbitt指出)。
您也可以使用按钮的名称(Session["LastNameFilter"] = btn.Name.Substring(btn.Name.Length-1, 1);
)。这为您省去了处理标签的麻烦,但意味着如果更改命名约定,一切都会中断。
// Is sender of type Control?
Dictionary<Control, string> lookupBasedOnButton = new Dictionary<Control, string>()
{
{ LinkButtonA, "A" },
// etc
};
Session["LastNameFilter"] = lookupBasedOnButton(sender);
根据您的需要,您可能需要添加错误处理(例如,检查条目是否在字典中,而不是在不在字典中抛出)。
存储并从LinkButton的CommandArgument属性中获取值
<asp:LinkButton runat="server" ID="LinkButtonA" CommandArgument="A" OnClick="LinkButtonA_OnClick"></asp:LinkButton>
protected void lb LinkButtonA_OnClick(object sender, EventArgs e)
{
var lb = (LinkButton) sender;
Session["LastNameFilter"] = lb.CommandArgument;
}
如果您能够将过滤器值添加为按钮的命令参数,那么您只需要这样做(适用于web表单LinkButton):
public void LinkButtonClicked(object sender, EventArgs e){
var linkButton = (LinkButton)sender;
Session["LastNameFilter"] = linkButton.CommandArgument;
}