我写了一个使用OCR的小代码。我遇到了一个令人困惑的情况,我的数据类型 var 变量在代码达到初始化之前就已经初始化了。 请看一下这个截图
代码行RecAPIPlus.RecInitPlus(null,null);
应该返回API初始化的状态。这行甚至没有执行,但我的状态变量似乎有一个默认值,即 REC_OK ,上面的代码行应该在执行时返回。
任何人都可以解释这个的原因吗?这是完整的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Nuance.OmniPage.CSDK;
namespace OmniPage
{
class Program
{
static void Main(string[] args)
{
try
{
Console.WriteLine(Nuance.OmniPage.CSDK.ZONETYPE.WT_AUTO);
var status=RecAPIPlus.RecInitPlus(null,null);
IntPtr a;
var output = RecAPI.kRecLoadImgF(0, "out.txt", out a, 1);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e);
}
}
}
}
答案 0 :(得分:5)
我猜status
字段的数据类型是enum
。枚举的第一个值是默认值(如果枚举是未编号的,则0
值是)。
var
只是意味着“使用从该方法返回的数据类型(或一般的赋值)。所以var
这里的意思就是”返回的枚举类型。“
这意味着如果REC_OK
是枚举中的第一个值,则它是该字段的默认值。枚举不能为空值,因此它显示默认值。
我看到破发点还没有到来。它仍然显示范围中那些未经过编辑的变量的当前状态。这只是一个Visual Studio的事情。
答案 1 :(得分:2)
status
变量为Enum
,enum
为值类型,不是引用类型。即使您的代码未设置变量,但值类型始终设置了默认值。
此外,var
不是类型,它只是语法糖,而变量具有真正的enum
类型。