C#使用未分配的局部变量 - 输出语句

时间:2012-08-20 12:58:11

标签: c# out

我已经找到了这个问题,但我不知道(并且没有找到)如何解决它。这里有谁知道如何解决这个问题?我正在使用EMGU,但问题在于c#编码(我对C#来说相当新) - 我认为这与out语句有关,因为我没有太多使用它们:

Image<Gray, Byte> first_image;

if (start_at_frame_1 == true)
{
    Perform_custom_routine(imput_frame, out first_image);
}
else
{
     Perform_custom_routine(imput_frame, out second_image);
}

Comparison(first_image);

5 个答案:

答案 0 :(得分:6)

您必须为变量提供默认值:

Image<Gray, Byte> first_image = null;

如果您将second_image作为out参数传递,则有可能不会指定任何内容。

答案 1 :(得分:2)

你有3个选择

Image<Gray, Byte> first_image = default(Image<Gray, Byte>);

Image<Gray, Byte> first_image = null;

Image<Gray, Byte> first_image = new Image<Gray, Byte>();

不要忘记使用second_image执行此操作。

答案 2 :(得分:1)

编译器警告您,您将在调用Comparison时使用未分配的变量。如果start_at_frame_1false,则永远不会设置变量first_image

您可以通过在初始化或else块中设置first_image = null来解决此问题。

答案 3 :(得分:0)

或者你可以把它作为Perform_custom_routine的返回参数。

Image<Gray, Byte> first_image;  

if (start_at_frame_1 == true)  
{  
    first_image = Perform_custom_routine(imput_frame, out first_image);  
}  
else  
{  
     first_image = Perform_custom_routine(imput_frame, out second_image);  
}  

答案 4 :(得分:-1)

如果使用'out'关键字,则必须在传递之前为变量赋值。

如果使用'ref'关键字,则必须在返回之前为传递给它的方法赋值。