14 .net c# value-type reference-type
我在这里的砖墙.是否可以将一个bool复制到另一个bool的ref.考虑这段代码...
bool a = false;
bool b = a;
Run Code Online (Sandbox Code Playgroud)
b现在是一个完全独立的bool,其值为false.如果我随后更改了a,则对b没有影响.是否有可能通过ref做出a = b?我该怎么办?
非常感谢
Ree*_*sey 33
不可以.因为bool是值类型,所以它将始终按值复制.
最好的选择是将bool包装在一个类中 - 这将为它提供引用类型语义:
public class BoolWrapper
{
public bool Value { get; set; }
public BoolWrapper (bool value) { this.Value = value; }
}
BoolWrapper a = new BoolWrapper(false);
BoolWrapper b = a;
b.Value = true;
// a.Value == true
Run Code Online (Sandbox Code Playgroud)
And*_*zov 13
感谢@Reed的回答(+1)!他鼓励我采用更"通用"的解决方案!:)
public class ValueWrapper<T> where T : struct
{
public T Value { get; set; }
public ValueWrapper(T value) { this.Value = value; }
}
Run Code Online (Sandbox Code Playgroud)
对安德烈答案的小扩展......这允许你直接将它分配到你想要的任何类型.所以:
ValueWrapper<bool> wrappedBool = new ValueWrapper<bool>(true);
bool unwrapped = wrappedBool; // you can assign it direclty:
if (wrappedBool) { // or use it how you'd use a bool directly
// ...
}
Run Code Online (Sandbox Code Playgroud)
public class ValueWrapper<T>
{
public T Value { get; set; }
public ValueWrapper() { }
public ValueWrapper(T value) {
this.Value = value;
}
public static implicit operator T(ValueWrapper<T> wrapper)
{
if (wrapper == null) {
return default(T);
}
return wrapper.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
这可能不是你想要的,但如果你的场景是你想要一个你调用的函数来修改你的本地布尔值,你可以使用 ref 或 out keyworkd。
bool a = false;
F(ref a);
// a now equals true
...
void F(ref bool x)
{
x = true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17329 次 |
| 最近记录: |