从扩展方法修改ValueType?

Mou*_*lde 14 c# extension-methods

几天前我需要切换一个bool,我最终这样做:

IsVisible = !IsVisible;
Run Code Online (Sandbox Code Playgroud)

我发现这是最简单的归档方式.但在做上面的例子之前,我尝试了一些不同的方法.

主要是关于使用扩展方法.在我的观点中,它会使它更简单,或者至少更少写字.

IsVisible.toggle();
Run Code Online (Sandbox Code Playgroud)

但是,由于布尔值是值类型,因此通过扩展方法发送的bool是原始bool的副本,而不是引用类型.

public static void Toggle(this boolean value)
{
value = !value;
}
Run Code Online (Sandbox Code Playgroud)

哪个会做我需要的,但因为布尔切换是原始布尔的副本,更改不适用于原始..

我尝试将ref关键字infront置于"boolean",但是没有编译.我仍然没有找到不编译的原因,这不是扩展方法的完美功能吗?

public static void Toggle(this ref boolean value)
Run Code Online (Sandbox Code Playgroud)

我甚至尝试将boolean转换为一个对象,在我的脑中将它变成一个引用类型,然后它将不再是一个副本,并且更改将被传回.那也行不通.

所以我的问题是,是否有可能使扩展传回更改,或者其他方式使其比现有的更简单?

我知道很可能不会比顶级示例更简单或更合理,但你永远不会知道:)

提前致谢.

Joe*_*orn 11

原始类型是不可变的.你必须像这样编写你的调用代码:

IsVisible = IsVisible.Toggle();
Run Code Online (Sandbox Code Playgroud)

这是扩展方法的最佳选择.没办法解决它.

  • 不 - 作为类型的"布尔"如何知道包含"IsVisible"实例的状态?右手表达式_must_包含变量. (2认同)