我想返回一个字符串集合,其中每秒的记录都是“0”,类似于:
foreach (Customer c in customers)
{
yield return c.Name;
yield return "0";
}
我开始了:
customers.Select(c => new
{
c.Name,
Second = "0"
}).???
答案 0 :(得分:7)
你需要SelectMany:
var resultList =
customers.SelectMany(c => new[] {c.Name, "0"});
这将获取您的源列表,并为每个项目后面插入一个“0”。
答案 1 :(得分:2)
我知道Select
或任何其他内置的扩展方法没有任何重载会自动为您执行此类操作。你可以为它编写自己的扩展名:
public static class EnumerableExtensions
{
public static IEnumerable<TResult> SelectWithSeparator<T, TResult>(
this IEnumerable<T> source,
Func<T, TResult> selector,
TResult separator)
{
if (selector == null)
throw new ArgumentNullException("selector");
foreach (T item in source)
{
yield return selector(item);
yield return separator;
}
}
}
然后:
var customerNames = customers.SelectWithSeparator(c => c.Name, "0");
答案 2 :(得分:1)
来自客户的c 选择新{ 名称= c.Name, 秒= 0 }
或 顾客 。选择(c =&gt; new { 名称= c.Name, 秒=“0” }
其中任何一个都会给你一个IQueryable。您可以使用.ToList()扩展名获取列表。
但接着是什么?
此后你想做什么?
答案 3 :(得分:1)
替换。???使用分号,您将获得IEnumerable<'a>
,其中'a是匿名类型,表示您的客户名称和您硬编码的值。
var query = customers.Select(c => new { Id = c.Name, Second = 0 });
foreach (var item in query)
{
// work with item.Name and item.Second
}
编辑:为了从你的评论中得到你想要的东西,你可以做到这一点,你已经基本上已经写好了。只需将其包装在返回IEnumerable<string>
static IEnumerable<string> GetCustomerNames(List<Customer> customers)
{
foreach (Customer c in customers)
{
yield return c.Name;
yield return "0";
}
}