如何在C#中返回引用?
我使用的是如何在C#中返回引用?,c#,c#-4.0,C#,C# 4.0,我使用的是Vector3D结构。我遇到的情况是,如果我拥有以下财产: Vector3D MyVec {get; set;} 如果我调用MyVec.Normalize()未修改MyVec值。我知道struct是值类型,getter将浅层复制一个新实例并返回它,因此Normalize()方法将修改temp对象,而不是MyVec本身 我怎样才能解决这个问题Vector3D不是类结构,我无法修改它 我可以用C#返回引用吗 谢谢。分配创建的结构 MyVec = MyVec.Normalize(); 正
Vector3D
结构。我遇到的情况是,如果我拥有以下财产:
Vector3D MyVec {get; set;}
如果我调用MyVec.Normalize()代码>未修改MyVec
值。我知道struct是值类型,getter将浅层复制一个新实例并返回它,因此Normalize()
方法将修改temp对象,而不是MyVec
本身
我怎样才能解决这个问题Vector3D
不是类结构,我无法修改它
我可以用C#返回引用吗
谢谢。分配创建的结构
MyVec = MyVec.Normalize();
正如devio指出的,如果Normalize方法不返回新的结构(可变结构是邪恶的),那么下面是您的解决方案:
var myVec = MyVec;
myVec.Normalize();
MyVec = myVec;
方法可以接受对值类型的引用
public void Normalize(ref YourStruct pParameter)
{
//some code change pParameter
}
Normalize(ref someParameter);
类似的工作和输出运算符:唯一的区别是,当使用输出参数时,不能初始化(分配)
编辑:但它仅在您拥有对方法的控制时可用,否则只需简单赋值。对结构的引用将导致.Net中的不安全代码
我想到了两个解决方案:
- 仅允许通过包含此类结构属性的类操纵Vector3D结构
- 将Vector3D结构封装在一个单独的类中,并根据需要使该类通过所有结构方法
public class Vector3DProxy
{
Vector3D value;
public Vector3D Value { get ... set ... }
public void Normalize() { value.Normalize(); }
}
我想你只能这样解决这个问题
MyVec = MyVec.NormalizeVector();
public static class Extension
{
public static Vector3D NormalizeVector(this Vector3D vec)
{
vec.Normalize();
return vec;
}
}
你的意思是:规范化(ref someObject.PropertyA)?是的,它不起作用。我认为编译器会给出警告(或事件编译错误)。如果您引用此Normalize()方法,则此方法无效。此方法无效,因为Normalize()
根本不返回结果,它在原地工作。可变结构是邪恶的,但我们这里有一个可变结构,需要解决它,我想:(