我想在调用函数之前使用可能未分配的out
或ref
参数。然后该函数负责检查参数是否存在,如果不存在,则创建并返回一个新对象。
以下是我正在尝试完成的一些示例C#代码:
public virtual object MyFunction(out object myObject)
{
if (myObject == null)
myObject = new Object();
// do some more things here...
// maybe return myObject, or perhaps something else
return myObject;
}
我希望下面四个示例函数调用中的每一个都被认为是有效的:
Object x = new Object();
MyFunction(x); // x gets passed by reference
Object y = MyFunction(x);
Object z = MyFunction();
Object u = MyFunction(null);
我在第3行收到错误,告诉我Out parameter 'list' might not be initialized before accessing
。尝试为myObject
提供默认值会产生错误A 'ref' or 'out' parameter cannot have a default value
。
有没有办法使用out
参数(通过引用传递)并在将它们分配给任何内容之前检查这些引用是否已经初始化?
答案 0 :(得分:4)
不,这是不可能的。如果使用out
参数,则在分配给变量之前不允许读取该值,因为编译器已经告诉过您。如果您使用ref
,则必须先参数进行初始化,然后才能传入。
答案 1 :(得分:0)
当方法没有其他任何东西可以返回时,返回值大部分时间都是正确的选择。
它只会阻止调用者分别声明变量。例如:
int x1;
GetValue(out x1);
声明变量:
int? x1 = GetValue();
您可以在MSDN documentation了解更多相关信息。
答案 2 :(得分:0)