Tag: 歧义

.ctor是不明确的,因为类中存在多个具有此名称的成员

我正在复制我所面临的情况。 假设我们有一个程序集,C#类为: public class Program { int n = 0; public void Print() { Console.WriteLine(n); } public Program() { } public Program(int num = 10) { n = num; } } 我们在VB.NET项目中引用上面的程序集并尝试创建Program类的实例: Module Module1 Sub Main() Dim p As New Program() p.Print() p = New Program(20) p.Print() Console.ReadLine() End Sub End Module VB.NET项目没有编译,给出错误: ‘.ctor’含糊不清,因为“ConsoleApplication2.Program”类中存在多种具有此名称的成员。 从错误消息我们可以看到VB.NET编译器不确定要调用哪个构造函数 […]

解决歧义

我有一个控制器,有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#编译器)。 任何人都可以指出我的方式错误吗?

如何在属性getter和带有一个参数的方法之间存在歧义?

我不敢相信我以前从未遇到过这个,但为什么我的代码会出现编译器错误? public class Main { public Main() { var ambiguous = new FooBar(1); var isConfused = ambiguous.IsValid; // this call is ambiguous } } public class FooBar { public int DefaultId { get; set; } public FooBar(int defaultId) { DefaultId = defaultId; } public bool IsValid { get { return DefaultId == 0; } } […]

为什么IList 。Reverse()不像List ()那样工作。反向

我有List.Reverse()和Reverse(this IEnumerable source) 。 看看代码: // Part 1 List list = new List { 1, 2, 3 }; foreach (int x in list) Console.Write(x); Console.WriteLine(); list.Reverse(); foreach (int x in list) Console.Write(x); Console.WriteLine(); list.Reverse(); // Part2 IList ilist = list; foreach (int x in list) Console.Write(x); Console.WriteLine(); ilist.Reverse(); foreach (int x in ilist) Console.Write(x); Console.WriteLine(); […]

等价隐式算子:为什么它们合法?

更新! 请参阅我对以下C#规范的一部分的剖析; 我想我必须遗漏一些东西,因为对我而言 ,我在这个问题中描述的行为实际上违反了规范。 更新2! 好的,经过进一步的反思,并根据一些评论,我想我现在明白了发生了什么。 规范中的“源类型”一词指的是从中转换的类型 – 即下面的示例中的Type2 – 这只是意味着编译器能够将候选缩小到两个定义的运算符(因为Type2是两种来源类型)。 但是,它无法进一步缩小选择范围。 所以规范中的关键词(适用于这个问题)是“源类型” ,我之前误解(我认为)是指“声明类型”。 原始问题 说我定义了这些类型: class Type0 { public string Value { get; private set; } public Type0(string value) { Value = value; } } class Type1 : Type0 { public Type1(string value) : base(value) { } public static implicit operator Type1(Type2 other) { […]