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();
}