c# - C# 中的泛型和函数

标签 c# .net generics functional-programming function

这是一些代码,它不会编译,但本质上我想要创建的是一个解析为 CSV 文件的函数,然后将 CSV 列表中的值转换为特定类型。

    Func<string, Func<string,T>, IEnumerable<T>> parser =(string csv, Func<string, T> newFunc) =>
    {
        List<T> items = new List<T>();
        string[] ary = csv.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string val in ary)
        {
            try
            {
                items.Add(newFunc(val));
            }
            catch { }
        }
        return items;
    }

我希望此函数是通用的,因此 T 是我希望将 CSV 列表转换为的类型。该函数的用法类似于:

 string csvList ="1,2,3";
        IEnumerable<int> list = parser(csvList, (string val) => { return Convert.ToInt32(val)});

但是这显然行不通,因为我还没有定义 T。那么是否可以以与泛型方法类似的方式定义 T,如下所示:

    Func<T><string, Func<string,T>, IEnumerable<T>> parser =(string csv, Func<string, T> newFunc) =>
    {
        List<T> items = new List<T>();
        string[] ary = csv.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string val in ary)
        {
            try
            {
                items.Add(newFunc(val));
            }
            catch { }
        }
        return items;
    }

然后像这样使用:

string csvList ="1,2,3";
        IEnumerable<int> list = parser<int>(csvList, (string val) => { return Convert.ToInt32(val)});

有没有办法在 C# 中做这样的事情?

--进一步编辑

感谢你们的回应,在我编写的代码中,我实际上使用了您所描述的方法,但我想知道是否可以将其作为 Func 来执行而不需要方法称呼。

最佳答案

也许我错过了一些东西,但我认为这就是你需要的:

public IEnumerable<T> Parse<T>(string csv, Func<string, T> func)
{
   foreach(var item in csv.Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries))
   {
      yield return func(item);
   }
}

关于c# - C# 中的泛型和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1868617/

相关文章:

c# - 如何将 IObservable<IObservable<T>> 转换为 IObservable<T>?

java - 泛型方法继承

c# - 在 Monotouch 中下载多个文件的推荐模式(异步/多线程)

c# - 反射 - 对象比较和默认值

c# - 构造函数参数存在时不存在的异常

C#泛型/ICommandHandler/ICommand设计

泛型的 Java 简称

c# - ASP.NET MVC 复杂模型更新

.net - System.Net.ServicePointManager.DefaultConnectionLimit == 24 --> BUG?

c# - 将许多变量写入文本文件