我有一些代码使用从IKVM转换为Java的类,以便在.NET中使用。所以我的代码示例在实例化类时使用VAR,例如:
var Something = new OriginallyFromJavaClass("c:\ReadInThisFile.txt");
然后,这个类的方法对该文本文件执行某些操作,如:
var analyze = OriginallyFromJavaClass.method1(whatever);
请注意,该类的其他用途并未引用" Something"但是直接调用java类名而不使用" new"字。
问题是读取文本文件需要30秒,所以我想在WinForms应用程序中只执行一次,然后在按钮单击中调用其他方法。但是如果我将上面的代码行移到我的类级别,所以我只需要打开TXT文件一次,C#编译器就会失败,因为它不允许在类级别使用VAR类型。我从根本上知道并且使用GetType来评估这个变量它是一个类。那么我将如何使用显式类型重构上面的内容以及我只在一次实例化类(因此读取我的TXT文件)?
答案 0 :(得分:2)
var只是糖,因为不必重复自己,如
OriginallyFromJavaClass Something = new OriginallyFromJavaClass("c:\ReadInThisFile.txt");
所以你可以使用
A a = new A()
而不是
var a = new A()
答案 1 :(得分:1)
尝试
TypeClass something = new TypeClass("c:\ReadInThisFile.txt");
答案 2 :(得分:1)
好吧,var只是infers the type如果您只是声明实际类型,那么你应该没问题。
CREATE TABLE Summary (
-- The primary key:
hr DATETIME NOT NULL COMMENT "Start of hour",
sensor_type ...,
sensor_name ...,
-- The aggregates being collected:
num_readings SMALLINT UNSIGNED NOT NULL,
sum_reading FLOAT NOT NULL, -- (maybe)
min_reading FLOAT NOT NULL,
max_reading FLOAT NOT NULL,
PRIMARY KEY(hr, sensor_type, sensor_name),
INDEX(sensor_name, hour) -- Maybe you want to look up by sensor?
) ENGINE=InnoDB;
答案 3 :(得分:0)
虽然var
只是语法糖,但要清理一些代码。有时可能会发生错误,因为CLR所期望的与推断的内容之间的推断实际上是不正确的。所以有时候明确是理想的。
否则它是短手的理想选择:
Dictionary<int, List<Sample>> example = new Dictionary<int, List<Sample>>();
var example = new Dictionary<int, List<Sample>>();
因此,只要它正确推断出类型,它就与显式声明相同。希望这能澄清你的问题。