c# - 如何在函数中实例化空引用参数?

标签 c# .net pass-by-reference pass-by-value

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”仍然为空。

所以我的问题是,如果我想实例化变量,就像指针通过引用传递给函数一样,该怎么办?这可行吗?

最佳答案

可以使用refout,但请不要!让 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/

相关文章:

c# - 判断对象是否被修改的最佳方法是什么?

c# - 这个C#函数组合方法是如何工作的?

c++ - 在 C++ 的类成员函数中传递当前对象的引用

javascript - 修改自执行函数中的参数

c# - 'using' 和范围界定之间的区别?

C# 如何在启动时设置全局数组的大小?

.net - IObservable<double>.Average 应该如何工作?

c++ - 为什么 C++ 允许将常量转换为另一个方法中的引用参数?

c# - 使用 ProcessStartInfo 作为 LocalSystem 启动进程

c# - 更改 PropertyGrid 左侧集合编辑器/ View 的宽度