c# - IEnumerable 扩展

标签 c# .net extension-methods ienumerable

我想制作一个 IEnumerable<TSource>可以将自身转换为 IEnumerable<SelectListItem> 的扩展.到目前为止,我一直在尝试这样做:

    public static 
      IEnumerable<SelectListItem> ToSelectItemList<TSource, TKey>(this 
      IEnumerable<TSource> enumerable, Func<TSource, TKey> text, 
                                       Func<TSource, TKey> value)
    {
        List<SelectListItem> selectList = new List<SelectListItem>();

        foreach (TSource model in enumerable)
            selectList.Add(new SelectListItem() { Text = ?, Value = ?});

        return selectList;
    }

这样做正确吗?如果是这样,我如何从 Func<TSource, TKey> 中的适当值中提取值? ?

最佳答案

您正在重新发明轮子。是什么Enumerable.Select用于。

@KeithS 编辑:要回答这个问题,如果您想要此输出,您可以定义一个包装 Enumerable.Select 的扩展方法:

public static IEnumerable<SelectListItem> ToSelectItemList<TSource>(
  this IEnumerable<TSource> enumerable,
  Func<TSource, string> text,
  Func<TSource, string> value)
{ 
  return enumerable.Select(x=>new SelectListItem{Text=text(x), Value=value(x));
}

关于c# - IEnumerable 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799319/

相关文章:

c# - 如何通过反射获得 protected 内部方法

c# - MathNet.Numerics x86 中是否包含 SVD?

.net - .NET 的 Markdown ? SO 如何即时渲染它?

c# - 指定为可选 Func<> 的扩展方法

c# - 实现扩展方法

c# - C# 中类似 JavaScript 的匿名函数

c# - File.Copy 和 File.Move 的区别

c# - 为什么可以只使用别名来声明枚举而不是 .NET 类型?

.net - Excel 2003 ActionsPane 中的 AutoSize ElementHost

c# - 扩展方法与静态方法优先级