如何填写列表<;未知类型>;内部函数(C#)
本文关键字:内部函数 gt 未知 何填写 列表 lt 类型 | 更新日期: 2023-09-27 18:27:29
我正在尝试编写通用函数,它可以填充List<OfAnyObjects>从文件,逐行。
using System.IO;
using System.Collections.Generic;
class Program{
public delegate object stringProcessing(string str);
public static void Main(string[] args){
List<string> strList = new List<string>();
stringProcessing strProc = stringPorc;
fileToList("./test.txt", strList, strProc);
}
public static object stringPorc(string str){
return(str + " " + str);
}
public static void fileToList(string path, List<object> lst, stringProcessing SP){
if(File.Exists(path)){
FileStream fs = new FileStream(path, FileMode.Open);
StreamReader sr = new StreamReader(fs);
string cl;
while((cl = sr.ReadLine()) != null) lst.Add(SP(cl));
sr.Close();
fs.Close();
}
else Service.WLLog("Error: File '"" + path + "'" does't seems to exist.");
}
}
它给出了一个错误(从俄语翻译过来):
Argument "2": type conversion from "System.Collections.Generic.List<string>" to "System.Collections.Generic.List<object>" impossible(CS1503) - C:'...'Program.cs:N,N
尝试这样做:
fileToList("./test.txt", strList as List<object>, strProc);
OR
fileToList("./test.txt", (List<object>)strList, strProc);
似乎没有帮助。
你知道怎么做吗?对不起,我的英语不是我的母语。
谢谢你的帮助。正确的(有效的)解决方案:
class Program{
//...
public static void Main(string[] args){
//...
fileToList<string>("./test.txt", strList, strProc);
}
//...
public static void fileToList<T>(string path, List<T> lst, stringProcessing SP) where T : class{
//...
lst.Add(SP(cl) as T);
//...
}
}
如果不使用List<object>
,而是使用IList
,则不会出现类型冲突。
您可以使方法Generic
示例:
public static void fileToList<T>(string path, List<T> lst, stringProcessing SP)
然后在调用它时,您可以提供类型。
List<string> strList = new List<string>();
stringProcessing strProc = stringPorc;
fileToList<string>("./test.txt", strList, strProc);
或
List<int> intList = new List<int>();
intProcessing intProc = intPorc;
fileToList<int>("./test.txt", intList , intProc);
你不能。您需要将其初始化为List<object>
:
List<object> strList = new List<object>();
或者更改参数类型:
public static void fileToList(string path, List<string> lst, stringProcessing SP)
只需将您的列表指定为List<string>
:
public static void fileToList(string path, List<string> lst, stringProcessing SP)
{
这样,文件处理将使用实际的string
值填充字符串列表。