Tag: 运算

generics和“二元运算符的参数之一必须是包含类型”错误

声明二元运算符时,至少有一个操作数类型必须是包含类型。 这听起来总体上是一个很好的设计决策。 但是,我没想到以下代码会导致此错误: public class Exp { public static Exp operator +(Exp first, Exp second) { return null; } } 这个运营商有什么问题? 为什么这种情况属于c#的运算符重载限制? 允许这种声明是危险的吗?

C#中操作员方法的方法名称

有没有人详细列出C#/ CLR给运营商的名字? (也许我的睡眠不足,但我似乎无法在Google上找到它)例如op_Addition,op_Subtraction。 此外,在其他文化中,这些会有什么不同吗? 我正在尝试创建一个可以添加/减去两个对象的类,我已经完成了所有原语 – 我只需要做’rest’。 非常感谢。

是否可以定义扩展运算符方法?

是否可以定义一个同时是运算符的扩展方法? 我想要一个固定的类添加使用实际上无法应用的已知运算符的可能性。 对于这种特殊情况,我想这样做: somestring++; //i really know that this string contains a numeric value 我不想为所有代码传播类型转换。 我知道我可以在字符串上创建包装类并定义该运算符,但我想知道是否可以使用MySpecialString来避免搜索和替换每个字符串声明。 编辑:因为大多数人说字符串是密封的,所以推导是不可能的,所以我修改“派生”到“包装”,我的错误。

当==未定义时,为什么==运算符适用于Nullable ?

我只是看着这个答案 ,其中包含来自.NET Reflector的Nullable的代码,我注意到两件事: 从Nullable到T时需要显式转换。 ==运算符未定义。 鉴于这两个事实,令我惊讶的是,这编译: int? value = 10; Assert.IsTrue(value == 10); 使用代码value == 10 ,任何一个value都被神奇地转换为int (因此允许使用int的==运算符,或者为Nullable神奇地定义了==运算符。(或者,我认为不太可能,Reflector省略了一些代码。) 我希望必须做以下其中一项: Assert.IsTrue((value.Equals(10)); // works because Equals *is* defined Assert.IsTrue(value.Value == 10); // works because == is defined for int Assert.IsTrue((int?)value == 10); // works because of the explicit conversion 这些当然是有效的,但==也有效,而这是我没有得到的部分。 我之所以注意到这一点并且问这个问题的原因是我正在尝试编写一个与Nullable类似的结构。 我从上面链接的Reflector代码开始,只做了一些非常小的修改。 不幸的是,我的CustomNullable工作方式不同。 我无法做Assert.IsTrue(value == 10) 。 […]

转换通用列表时显式转换运算符错误

我正在创建一个显式转换运算符,以将实体类型的通用列表转换为通用的模型类型列表。 有谁知道我为什么会收到以下错误: 用户定义的转换必须转换为封闭类型或从封闭类型转换 我已经在Entity.objA和Model.objA之间有一个显式转换运算符,它运行正常。 尝试转换通用列表时出现问题。 这有可能吗? 这是我的代码: public static explicit operator List(List entities) { List objs= new List(); foreach (Entity.objA entity in entities) { objs.Add((Model.objA)entity); } return claims; } 谢谢你的帮助。