【发布时间】:2026-01-21 21:15:01
【问题描述】:
我正在开发一个小程序,该程序具有一些用于一堆变量的保存和打开功能。 变量有各种类型,int - string - double 和数组
我想实现一个可以处理所有不同数据类型的函数
假设我有以下变量
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
}
}
}
无数组部分效果很好。在数组部分产生这个错误:
无法将带有 [] 的索引应用于
T类型的表达式
有没有办法解决这个问题?
【问题讨论】:
-
你不能简单地创建一个类,它包含所有变量的属性,然后使用Json.NET 将其序列化为 JSON 吗?