如何在函数内部填充列表<未知类型> (C#)



我正在尝试编写通用函数,它可以填充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值填充字符串列表。

最新更新