3

我一直在寻找这个问题,但我不知道(也没有找到)如何解决它。这里有谁知道如何解决这个问题?我正在使用 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);
4

5 回答 5

8

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

Image<Gray, Byte> first_image = null;

否则,如果您second_image作为 out 参数传递,您可能不会分配任何内容。

于 2012-08-20T12:59:13.663 回答
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

于 2012-08-20T12:59:26.007 回答
2

编译器警告您,您将在调用Comparison. 如果start_at_frame_1false,您的变量first_image将永远不会被设置。

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

于 2012-08-20T13:03:55.670 回答
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);  
}  
于 2012-08-20T13:04:27.017 回答
-1

如果你使用'out'关键字,你必须在传递变量之前给它一个值。

如果您使用“ref”关键字,则必须在返回之前在传递给它的方法中给变量一个值。

于 2012-08-20T13:23:38.397 回答