C# 修改方法以接受不同数量和类型的参数
我正在和其他一些大学一起做这个项目。它是基于C# 修改方法以接受不同数量和类型的参数,c#,.net,C#,.net,我正在和其他一些大学一起做这个项目。它是基于Windows MDI表单构建的,我们有一个自定义的方法来加载表单,以满足客户的特定需求 开始时,该方法只需采用两个参数: protected void LoadForm<T>(ToolStripButton formButton, string buttonText) where T : Base Form 业务逻辑的实际方法是: protected void LoadForm<T>(ToolStripButton form
Windows MDI表单
构建的,我们有一个自定义的方法来加载表单,以满足客户的特定需求
开始时,该方法只需采用两个参数:
protected void LoadForm<T>(ToolStripButton formButton, string buttonText) where T : Base Form
业务逻辑的实际方法是:
protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null) where T : BaseForm
并添加新方法来处理需要传递bool参数的情况:
protected void LoadForm<T>(bool IsClosingForm= true) where T : BaseForm
{
LoadForm<T>(null, null, null, IsClosingForm);
}
受保护的无效加载表单(bool IsClosingForm=true),其中T:BaseForm
{
LoadForm(null,null,null,IsClosingForm);
}
并将我的方法修改为调用四参数方法:
protected void LoadForm<T>(long? EntityId = null) where T : BaseForm
{
LoadForm<T>(null, null, EntityId, true);
}
受保护的void LoadForm(long?EntityId=null),其中T:BaseForm
{
LoadForm(null,null,EntityId,true);
}
但它不是那样工作的,我得到的错误是:
受保护的void LoadForm(long?EntityId=null)
和受保护的void LoadForm(bool IsClosingForm=true)
方法之间的调用不明确
很明显,我没有得到这里的逻辑,所以我有两个问题-如何修改代码使其工作,如果可能的话,我希望有人指出我的错误的原因,这样我就可以得到背后的逻辑。首先,这项任务似乎很简单,但是现在我想我遗漏了一些我不应该留下的不理解的东西。是否有可能您正在传入0或1,并且对于它是
bool
或long是一个模糊的问题?
可能在方法调用中将它转换为long
,以确保注册为long
,而不是bool
这是一个模棱两可的调用:
LoadForm<T>()
LoadForm()
调用可以解释为以下两种方法之一:
LoadForm(long?EntityId=null)
- 或者作为
LoadForm(bool IsClosingForm=true)
也许您可以删除默认值并创建另一个不需要任何参数的重载。当在没有参数的情况下调用LoadForm时,将使用此新重载您可以发布用于调用该方法的代码吗?产生错误的那一行?我得到了很多错误,但都是用于不明确的调用,比如
LoadForm(false)代码>或LoadForm()代码>我认为尝试传递long?
值时出错,但现在找不到实际的示例。您正在创建一个怪物。不要像那样创建重载方法的负载-这对调用者来说太可怕了。相反,请使用不同的名称编写方法。然后你可以让名字更具描述性,与他们期望的内容相比较。@MatthewWatson同意这一点。@MatthewWatson我不能说我太喜欢它,但除了我年幼,我的任务是让它像这样(尽管我的第一个解决方案是用另一种方法)现在我看到,如果我像这样更改方法:protectedvoidloadform(long?loadEntityId=null,bool IsClosingForm=true),其中T:BaseForm{LoadForm(null,null,loadEntityId,IsClosingForm);}
并且如果我进行调用:LoadForm(null,false)代码>它正在编译,看起来正在运行,但我真的想避免传递两个参数。
protected void LoadForm<T>(bool IsClosingForm= true) where T : BaseForm
{
LoadForm<T>(null, null, null, IsClosingForm);
}
protected void LoadForm<T>(long? EntityId = null) where T : BaseForm
{
LoadForm<T>(null, null, EntityId, true);
}
LoadForm<T>()