Tag: 方法 重载

解决歧义

我有一个控制器,有3个重载的create方法: public ActionResult Create() {} public ActionResult Create(string Skill, int ProductId) {} public ActionResult Create(Skill Skill, Component Comp) {} 在我的一个观点中,我想创建这个东西,所以我称之为: @Html.Action(“Create”) 但我得到错误: {“控制器类型’XController’上的当前操作请求’Create’在以下操作方法之间是不明确的:System.Web.Mvc.ActionResult类型X.Web.Controllers.XController上的Create()System.Web.Mvc.ActionResult在类型X.Web.Controllers.XController上创建(System.String,Int32)System.Web.Mvc.ActionResult在类型X.Web.Controllers上创建(X.Web.Models.Skill,X.Web.Models.Component)。 XController“} 但由于@html.Action()没有传递任何参数,因此应该使用第一个重载。 它对我来说似乎并不含糊(这只意味着我不认为像ac#编译器)。 任何人都可以指出我的方式错误吗?

为什么重载方法的优先级低于实例方法

我有基础A public class A { public virtual void Method(A parameter) { Console.WriteLine(MethodBase.GetCurrentMethod()); } public virtual void Method(B parameter) { Console.WriteLine(MethodBase.GetCurrentMethod()); } } 固有的B public class B : A { public virtual void Method(object parameter) { Console.WriteLine(MethodBase.GetCurrentMethod()); } public override void Method(A parameter) { Console.WriteLine(MethodBase.GetCurrentMethod()); } public override void Method(B parameter) { Console.WriteLine(MethodBase.GetCurrentMethod()); } } 静态类S带扩展方法 […]

C#重载返回类型 – 推荐方法

我有一种情况,我只希望返回类型与方法重载不同,但你不能在C#中这样做。 处理这个问题的最佳方法是什么? 事实是我需要这个意味着我的程序结构存在缺陷吗? 鉴于在C#中这是不可能的,推荐的方法是什么?

ASP.NET MVC自定义成员资格提供程序 – 如何重载CreateUser?

我正在尝试构建自定义成员资格提供程序。 我想在注册期间捕获其他信息(名字和姓氏),我不使用用户名(电子邮件是登录名)。 在我的自定义成员资格提供程序中,我正在尝试重载CreateUser方法,如下所示: public override MyMembershipUser CreateUser(string firstName, string lastName, string email, string password) { … } 但是,当我想从帐户控制器调用它时: [HttpPost] public ActionResult Register(RegisterModel model) { if (ModelState.IsValid) { // Attempt to register the user MembershipCreateStatus createStatus; Membership.CreateUser(model.FirstName, model.LastName, model.Email, model.Password); if (createStatus == MembershipCreateStatus.Success) { return RedirectToAction(“Index”, “Home”); } else { ModelState.AddModelError(“”, ErrorCodeToString(createStatus)); } } // […]

为什么编译器不能在这种重载决策情况下告诉更好的转换目标? (协方差)

理解关于重载决策的C#语言规范显然很难,现在我想知道为什么这个简单的情况失败了: void Method(Func f) { } void Method(Func f) { } void Call() { Method(() => { throw new NotSupportedException(); }); } 这给出了编译时错误CS0121, 以下方法或属性之间的调用是不明确的:后面是我的两个Method函数成员(重载)。 我所期望的是Func是一个比Func 更好的转换目标 ,然后应该使用第一个重载。 自.NET 4和C#4(2010)以来,generics委托类型Func在TResult一直是协变的,因此从Func到Func存在隐式转换,而显然没有隐式转换可以从Func到Func 。 那么它会使Func成为更好的转换目标,而重载决策应该选择第一次重载? 我的问题很简单:我在这里错过了C#规范的哪一部分? 增加:这很好用: void Call() { Method(null); // OK! }

关于generics和IEnumerable的方法重载解析

前几天我注意到了这一点,说你有两个重载方法: public void Print(IEnumerable items) { Console.WriteLine(“IEnumerable T”); } public void Print(T item) { Console.WriteLine(“Single T”); } 这段代码: public void TestMethod() { var persons = new[] { new Person { Name = “Yan”, Age = 28 }, new Person { Name = “Yinan”, Age = 28 } }; Print(persons); Print(persons.ToList()); } 打印: Single T Single […]