2
votes

impossible de convertir implicitement le type system.collections.generic.IEnumerable en chaîne []

Tentative de résolution et obtention de l'erreur suivante

public String[] Any()
{                            
    var lastSixMonths = Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy"));

    return lastSixMonths;
}


3 commentaires

C'est le plus grand danger d'utiliser var pour déclarer des variables. Oui, il reste fort typé, mais vous pouvez manquer le type avec lequel vous travaillez.


Vous pouvez également modifier le type de retour en IEnumerable au cas où les utilisateurs de cette méthode souhaitent une évaluation paresseuse des valeurs.


btw, vous pouvez rendre votre IEnumerable plus simple .Range (0, 6) .Select (i => DateTime.Now.AddMonths (i - 6) .ToString ("MM / aaaa "));


5 Réponses :


5
votes

Puisque le lastSixMonths est le IEnumerable et que vous attendez un tableau, essayez ceci:

return lastSixMonths.ToArray();

J'ai également créé .NET Fiddle pour montrer comment vous pourriez imprimer la chaîne [] .


5 commentaires

obtenir System.string [] en sortie


"obtenir System.string [] comme sortie" ... Non, vous ne l'êtes pas. Votre appel .Select () renvoie une IEnumerable que vous devez explicitement convertir en tableau.


je voulais juste afficher les six mois dans un tableau ou une chaîne


après avoir essayé ToArray (), j'obtiens System.String [] en sortie


Puisqu'il semble que @DharmaTeja ait des problèmes avec le tableau, j'ajoute une réponse très similaire à celle-ci, en essayant de clarifier le problème.



1
votes

De cette façon:

public String[] Any()
{   
    return Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy")).ToArray();
}

Pourquoi cela n'a-t-il pas fonctionné?

Le Select de Linq renvoie un IEnumerable avec des instructions de filtrage, de tri, etc.

C'est à vous, de décider quoi récupérer, si un seul élément FirstOrDefault ou plus d'un élément comme ToList , ToArray , ToDictionary etc.


0 commentaires

1
votes

Votre problème : votre appel .Select () renvoie un IEnumerable que vous devez explicitement convertir en un tableau

: Il n'était pas nécessaire de passer deux appels .Select () l'un après l'autre, vous auriez pu passer avec un seul appel.

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


0 commentaires

0
votes

Cela devrait le faire:

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


0 commentaires

0
votes
public String[] Any()
{   
    return Enumerable.Range(0, 6).Select(i => DateTime.Now.AddMonths(i - 6)).Select(date => date.ToString("MM/yyyy")).ToArray();
}
What needs to be understoodUnderstand the requirement, fetching 6 months of data from the database using LINQ will provide us a collection of data or multiple rows. So if we want we can limit it by giving condition and using .FirstorDefault or if we need an array or in the list format we can use .ToList or .ToArray.

0 commentaires