我寫了一個使用OCR的小代碼。我遇到了一個令人困惑的情況,我的變量數據類型var在代碼達到初始化之前被初始化。 請看看這張截圖
在C#中初始化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);
}
}
}
}
RecInitPlus的返回類型是什麼?它返回一個枚舉?這個枚舉是否有明確的值?如果REC_OK是第一個枚舉成員,並且它沒有顯式值,那麼它的值是0,這是默認值。你期望變量在賦值之前有什麼價值? –
將'var'想象成一個佔位符,編譯器會爲你填充它。所以它總是有一個類型。 – DavidG
儘管您可能會在代碼中的任意位置定義變量,但編譯器將實際使用默認值在當前範圍的頂部定義它。 – juharr