2

我试图编写通用函数,它可以从文件中逐行填充 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);
        //...
    }
}
4

4 回答 4

3

而不是使用List<object>,如果你改为使用IList,你将没有类型冲突。

于 2013-08-13T23:03:15.453 回答
1

你可以使方法通用

例子:

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);
于 2013-08-13T23:03:09.567 回答
0

你不能。您需要将其初始化为List<object>

List<object> strList = new List<object>();

或者更改参数类型:

public static void fileToList(string path, List<string> lst, stringProcessing SP)
于 2013-08-13T23:03:01.067 回答
0

只需将您的列表指定为List<string>

public static void fileToList(string path, List<string> lst, stringProcessing SP)
{

这样,您的文件处理将用实际string值填充字符串列表。

于 2013-08-13T23:03:03.593 回答