所以我有一个简单的方法叫做 Invert
:
public static void Invert(this bool value)
{
value = !value;
}
它位于
.dll
中的静态类中文件。现在,当我进入一个新的 Winforms 项目时,我添加了 .dll
作为引用,到目前为止一切都很好。现在当我这样做时:bool test = true;
test.Invert();
我没有收到任何错误,但是当我这样做时:
MessageBox.Show(test.ToString());
它输出
true
,好像什么都没变。我不确定是因为我在方法中所做的事情还是其他原因。但如果我去:MessageBox.Show((!test).ToString());
它输出
false
.谢谢。
最佳答案
这工作正常。因为bool
是一个值类型,它作为一个值传递并且原始变量( test
)永远不会被更改。
相反,您应该执行以下操作:
public static bool Invert(this bool value)
{
return !value;
}
但是,创建一个方法来完成语言本身的工作有点浪费时间。
我认为扩展方法不会让您使用
this
通过引用传递参数,因此您必须使用常规的静态方法,并长期调用它:public static bool Invert(ref bool value) { value = !value; }
BooleanHelpers.Invert(ref test);
最后,这样做会更干净、更容易(更不用说对其他开发人员来说更明显了):
test = !test;
关于c# - 扩展方法无法正常工作 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11337148/