class A
{
public int B { get; set; }
public int C { get; set; }
}
private static void function(A a)
{
if (a == null) a = new A();
a.B = 2;
a.C = 3;
}
A a = new A(); //a is not null
a = null; // a is null
function(a);
//a is still null
如果我使用 C++ 类比,我的理解是,虽然“a”是一个指向“A”类型的对象的指针,该对象由函数通过引用访问,但指针本身被用作值类型。最终结果是变量“a”仍然为空。
所以我的问题是,如果我想实例化变量,就像指针通过引用传递给函数一样,该怎么办?这可行吗?
最佳答案
您可以使用ref
或out
,但请不要!让 void
方法通过参数返回值是一种定义代码味道。这些关键字应该被视为与 goto
相当(即语言支持它们,并且在一些边缘情况下可以使用它们,但它们应该是最后的工具)。相反,让您的函数返回值:
private static A function(A a)
{
if (a == null) a = new A();
a.B = 2;
a.C = 3;
return a;
}
A a = new A(); //a is not null
a = null; // a is null
a = function(a); // a is not null
关于c# - 如何在函数中实例化空引用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30802315/