C# 无法隐式转换类型system.collections.generic.IEnumerable<;字符串>;串
尝试解决并获得以下错误C# 无法隐式转换类型system.collections.generic.IEnumerable<;字符串>;串,c#,.net,xamarin,C#,.net,Xamarin,尝试解决并获得以下错误 public String[] Any() { var lastSixMonths = Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy")); return lastSixMonths; } 由于lastSixMonths是IE
public String[] Any()
{
var lastSixMonths = Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy"));
return lastSixMonths;
}
由于
lastSixMonths
是IEnumerable
,您需要一个数组,请尝试以下操作:
return lastSixMonths.ToArray();
我还创建了一个示例来演示如何以这种方式打印
字符串[]
:
public String[] Any()
{
return Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy")).ToArray();
}
为什么不起作用?
Linq的Select
返回带有过滤、排序等指令的IEnumerable
如果单个元素
first或default
或多个元素(如ToList
、ToArray
、ToDictionary
等)出现问题,则由您决定检索什么。:您的.Select()
调用必须显式转换为数组
改进:不需要进行两次。一次又一次地调用Select()
,只需一次调用即可
public String[] Any()
{
IEnumerable<string> lastSixMonths = Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6).ToString("MM/yyyy"));
// Now we convert it into an array.
string[] returned = lastSixMonths.ToArray();
return returned;
}
public String[]Any()
{
IEnumerable lastSixMonths=Enumerable.Range(0,6).Select(i=>DateTime.Now.AddMonths(i-6).ToString(“MM/yyyyy”);
//现在我们将其转换为一个数组。
字符串[]返回=lastSixMonths.ToArray();
返回;
}
这应该可以做到:
public String[] Any()
{
IEnumerable<String> lastSixMonths = Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy"));
return lastSixMonths.ToArray();
}
public String[]Any()
{
IEnumerable lastSixMonths=Enumerable.Range(0,6)。选择(i=>DateTime.Now.AddMonths(i-6))。选择(date=>date.ToString(“MM/yyyy”);
返回最近六个月。ToArray();
}
需要理解的内容
了解需求,使用LINQ从数据库中获取6个月的数据将为我们提供一组数据或多行数据。因此,如果我们需要,我们可以通过给定条件并使用.FirstorDefault来限制它,或者如果我们需要数组或列表格式,我们可以使用.ToList或.ToArray获取System.string[]作为输出“获取Systen.string[]作为输出”。。。不,你不是。你的
.Select()
调用确实返回一个IEnumerable
,你必须显式地将其转换为数组。只是想在数组或字符串中显示最近六个月。在尝试数组()之后,我得到了System.String[]作为输出因为@DharmaTeja似乎在数组中遇到了问题,我添加了一个非常类似的答案,试图弄清楚这个问题。使用var
声明变量是最大的危险。是的,它仍然是强类型的,但您可能会错过正在使用的类型。如果此方法的用户希望延迟计算值,您还可以将返回类型更改为IEnumerable。顺便说一句,您可以使您的IEnumerable
更简单.Range(0,6)。选择(i=>DateTime.Now.AddMonths(i-6)。ToString(“MM/yyyy”)代码>
public String[] Any()
{
return Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy")).ToArray();
}