如何填写List <unknown type =“”>函数内部(C#)</unknown>

时间:2013-08-13 22:56:02

标签: c# list generic-list

我尝试编写通用函数,可以填充List&lt; OfAnyObjects&gt;从文件,逐行。

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 个答案:

答案 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值的字符串列表。