我尝试编写通用函数,可以填充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);
//...
}
}
答案 0 :(得分:3)
如果您改为使用List<object>
,而不是使用IList
,则不会发生类型冲突。
答案 1 :(得分:1)
你可以制作方法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);
答案 2 :(得分:0)
你做不到。您需要将其初始化为List<object>
:
List<object> strList = new List<object>();
或更改参数类型:
public static void fileToList(string path, List<string> lst, stringProcessing SP)
答案 3 :(得分:0)
只需将您的列表指定为List<string>
:
public static void fileToList(string path, List<string> lst, stringProcessing SP)
{
这样,您的文件处理将填充具有实际string
值的字符串列表。