C# 泛型:从文本文件中读取数据,以泛型形式返回
经常遇到需要返回不同数据类型,所以尝试了一下泛型函数,经测试可行。学会了返回值为泛型时该如何处理,用 (T)(object) 语句进行类型转换,例如:
data[i][j] = (T)(object)double.Parse("12.3");
完整代码如下:
/// <summary>
/// 从文件中读取数据(泛型方式)
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="fileFullName">待读文件</param>
/// <param name="passRowNums">跳过行数(不需跳过则为0)</param>
/// <param name="separator">分隔符</param>
/// <returns></returns>
public static T[][] readFile<T>(string fileFullName, int passRowNums, string separator)
{
if (File.Exists(fileFullName)) //判断文件是否存在(地址是否正确)
{
string[] lines = File.ReadAllLines(fileFullName); //按行读取到字符串类型
T[][] data = new T[lines.Length - passRowNums][];
for (int i = 0; i < data.Length; i++)
{
//按分隔符分割
string[] iLine_splitted = Regex.Split(lines[i + passRowNums].Trim(), separator);
data[i] = new T[iLine_splitted.Length];
//string类型
if (typeof(T).Equals(typeof(string))) data[i] = (T[])(object)iLine_splitted;
//double类型
if (typeof(T).Equals(typeof(double)))
{
for (int j = 0; j < data[i].Length; j++)
{
data[i][j] = (T)(object)double.Parse(iLine_splitted[j]);
}
}
//int类型
if (typeof(T).Equals(typeof(int)))
{
for (int j = 0; j < data[i].Length; j++)
{
data[i][j] = (T)(object)(int)double.Parse(iLine_splitted[j]);
}
}
}
return data;
}
else { Console.WriteLine("未找到文件:" + fileFullName); return null; }
}