我正在爲一些變量提供一些保存和打開功能的小程序。 變量是不同類型的,詮釋的 - 字符串 - 雙也陣列使用通用數組讀取文件參考
我想實現一個功能,可以應付所有不同的數據類型
比方說,我有以下變量
int var_int_1 = 1;
double var_double_1 = 2.2;
string var_string_1 = "three";
int[] arr_int_1 = new int[5];
保存的文件看起來像這樣
var_int_1: 1
var_double_1: 2.2
var_string_1: "three"
arr_int_1:
arr_int_1_00: 1;
arr_int_1_01: 2;
我開的功能將類似於
public bool open(string filename)
{
try
{
string line;
using (StreamReader file = new StreamReader(filename))
{
while ((line = file.ReadLine()) != null)
{
extract_value_from_stream("var_int_1", line, ref var_int_1);
extract_value_from_stream("var_double_1", line, ref var_double_1);
extract_value_from_stream("var_string_1", line, ref var_string_1);
extract_value_from_stream("arr_int_1", line, ref arr_int_1);
}
}
}
catch ...
的extract_value_from_stream功能:
public void extract_array_from_stream<T>(string str_name, string line, ref T var_name)
{
if (typeof(T).IsArray) //T is an array => return array element
{
string index;
str_name += "_"; //add "_" to name
index = line.Substring(line.IndexOf(str_name) + str_name.Length,2); //read index - 2 positions after str_name
var_name[int.Parse(index)] = (T)Convert.ChangeType(line, typeof(T));
}
else //if no array => return single value
{
str_name += ": "; //add ":" to name (see file)
if (line.Contains(str_name)) //if line contains name
{
line = line.Substring(line.IndexOf(str_name) + str_name.Length); //data = substring after str_name
var_name = (T)Convert.ChangeType(line, typeof(T)); //cast line to correct type var_name
}
}
}
無陣列部分很好地工作。在陣列部分產生這個錯誤:
Cannot apply indexing with [] to an expression of type
T
有沒有什麼辦法解決這個問題?
你不能簡單地創建一個類,將有屬性的所有變量和只使用它序列化到JSON [的Json .NET](http://www.newtonsoft.com/json)? –