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; } }