mat*_*ewr 1 c# extension-methods pass-by-value
所以我有一个简单的方法叫做Invert:
public static void Invert(this bool value)
{
value = !value;
}
Run Code Online (Sandbox Code Playgroud)
它位于.dll文件中的静态类中.现在当我去一个新的Winforms项目时,我添加了.dll作为参考,到目前为止一切都很好.现在当我这样做:
bool test = true;
test.Invert();
Run Code Online (Sandbox Code Playgroud)
我没有错误,但是当我这样做时:
MessageBox.Show(test.ToString());
Run Code Online (Sandbox Code Playgroud)
它输出true,好像什么都没有改变.我不确定是否因为我在方法或其他方面所做的事情.但是,如果我去:
MessageBox.Show((!test).ToString());
Run Code Online (Sandbox Code Playgroud)
它输出false.
谢谢.
这工作正常.因为它bool是一个值类型,所以它作为值传递,并且原始变量(test)不会被更改.
相反,你应该做的事情如下:
public static bool Invert(this bool value)
{
return !value;
}
Run Code Online (Sandbox Code Playgroud)
但是,创建一种能够完成语言本身的方法有点浪费时间.
我不认为扩展方法会让你this通过引用获取参数,所以你必须使用常规的静态方法,并调用它很长的路:
public static bool Invert(ref bool value) { value = !value; }
BooleanHelpers.Invert(ref test);
Run Code Online (Sandbox Code Playgroud)
最后,通过这种方式实现它会更加清洁和简单(更不用说其他开发人员更明显了):
test = !test;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |