【发布时间】:2023-03-10 18:15:01
【问题描述】:
我正在阅读有关扩展方法的信息,并与他们胡闹 看看它们是如何工作的,我尝试了这个:
namespace clunk {
public static class oog {
public static int doubleMe(this int x) {
return 2 * x;
}
}
class Program {
static void Main() {
Console.WriteLine(5.doubleMe());
}
}
}
它按预期工作,使用 doubleMe 方法成功扩展 int,打印 10。
接下来,作为一个老 C 的人,我想知道我是否可以这样做:
namespace clunk {
public static class BoolLikeC {
public static bool operator true(this int i) { return i != 0; }
public static bool operator false(this int i) { return i == 0; }
}
class Program {
static void Main() {
if ( 7 ) {
Console.WriteLine("7 is so true");
}
}
}
}
我认为,如果前者可行,那么后者应该努力做到这一点 在布尔上下文中使用的 int 会调用 int 上的扩展方法,检查一下 7不等于0,返回true。但相反,编译器甚至不喜欢 稍后的代码,并将红色波浪线放在这两个下面,并说“预期类型”。 为什么这不起作用?
【问题讨论】:
-
完全猜测,但是,您是否尝试过在运算符上使用隐式键?
-
好吧,这不会编译,因为您不能使用扩展方法来创建重载运算符。您可以也许创建一个可以工作的
BoolLikeC类,但我认为这样做不是一个好主意。如果你想写 C,那么就写 C。C# 被设计成使这种东西非法是有充分理由的。如果要确定一个整数是否为 0,请使用相关的语言构造。
标签: c# extension-methods