C # déclare un tableau de chaînes vide

152

J'ai besoin de déclarer un tableau de chaînes vide et j'utilise ce code

string[] arr = new String[0]();

Mais j'obtiens une erreur "nom de méthode attendu".

Qu'est-ce qui ne va pas?

aquanat
la source
2
Pourquoi avez-vous besoin d'un tableau vide? Qu'essayez-vous de faire?
Mr T.
7
@MrT. pas vraiment pertinent par rapport à la question.
James
1
@James - il y a peut-être une manière plus élégante de faire tout ce qu'il essaie de faire.
Mr T.
4
@aquanat - bien qu'une réponse ait déjà été acceptée et que je ne connaisse pas votre code ou la logique derrière elle, je vous suggère humblement de ne pas renvoyer un tableau vide mais nul et de vérifier à partir de la fonction appelante si la valeur renvoyée est nulle ou ne pas. Je pense que ce serait beaucoup plus élégant, lisible et efficace.
Mr T.
2
La raison pour laquelle vous ne souhaitez pas renvoyer null est que le consommateur de la méthode doit rechercher null. Par exemple, le consommateur de la méthode pourrait mettre la valeur retournée dans un foreach et si un tableau vide est retourné, il n'y a pas de problème. Cependant, si null est retourné, il doit y avoir une vérification de null avant d'itérer la valeur retournée
JAB

Réponses:

265

Essaye ça

string[] arr = new string[] {};
Atish Dipongkor - MVP
la source
1
Merci à tous ... ne me demandez pas pourquoi, mais le seul moyen était: string [] arr = new String [0] as string [];
aquanat
2
La méthode d'Atish a fonctionné et éliminé les plaintes de Visual Studio sur l'utilisation d'une variable qui n'est pas initialisée si je l'assigne dans une instruction if
Joe
1
L'autre option estc# Array.Empty<string>()
Jannick Breunis le
68

Votre syntaxe est incorrecte:

string[] arr = new string[]{};

ou

string[] arr = new string[0];
Andrei
la source
1
Pourquoi la chaîne est-elle à la fois en majuscule et non en majuscule dans vos exemples?
n'est pasALie.
1
@newStackExchangeInstance, vient de copier le code "tel quel" de la question. Les deux lignes se compilent bien, même si je suis d'accord pour dire que suivre un style est mieux.
Andrei
15

Si vous utilisez .net 4.6, ils ont une nouvelle syntaxe que vous pouvez utiliser:

using System;  // To pick up definition of the Array class.

var myArray = Array.Empty<string>();
Brian
la source
Joli tour! Et cela fonctionne également avec IList <T>: IList <string> x = Array.Empty <string> ();
ZunTzu
9

Tu peux essayer ça

string[] arr = {};
Bharadwaj
la source
8

Les constructeurs des tableaux sont différents. Voici quelques façons de créer un tableau de chaînes vide:

var arr = new string[0];
var arr = new string[]{};
var arr = Enumerable.Empty<string>().ToArray()

(désolé, sur mobile)

It'sNotALie.
la source
1

Ces choses bouclées sont parfois difficiles à retenir, c'est pourquoi il existe une excellente documentation :

// Declare a single-dimensional array  
int[] array1 = new int[5];
CodeCaster
la source
Inutile de modifier cette réponse, car les réponses servent le but général, et non la question spécifique en soi. Il répond "Quelle est la syntaxe pour déclarer et initialiser un tableau" et est une citation du lien que j'ai posté. OP peut remplacer intpar strings'il le souhaite.
CodeCaster
1

Votre syntaxe n'est pas valide.

string[] arr = new string[5];

Cela créera arr, un tableau référencé de chaînes, où se trouvent tous les éléments de ce tableau null. (Puisque les chaînes sont des types de référence )

Ce tableau contient les éléments de arr[0]à arr[4]. L' newopérateur est utilisé pour créer le tableau et initialiser les éléments du tableau à leurs valeurs par défaut. Dans cet exemple, tous les éléments du tableau sont initialisés avec null.

Single-Dimensional Arrays (C# Programming Guide)

Soner Gönül
la source
Merci à tous ... ne me demandez pas pourquoi, mais le seul moyen était: string [] arr = new String [0] as string [];
aquanat
0

Si vous devez créer un tableau vide, vous pouvez le faire:

string[] arr = new string[0];

Si vous ne connaissez pas la taille, vous pouvez également utiliser List<string>comme

var valStrings = new List<string>();

// do stuff...

string[] arrStrings = valStrings.ToArray();
Rahul
la source
Je suis vraiment désolé. J'ai accidentellement ruiné votre message avec de mauvaises modifications.
Soner Gönül
-3

Ce qui suit devrait fonctionner correctement.

string[] arr = new string[] {""};
Karthikeyan Gunasheker
la source
5
Ce n'est pas un tableau vide, car il contient un élément qui est une chaîne vide. arr.Length () retournera 1.
Guillermo Prandi
Ce n'est peut-être pas un tableau vide, mais je trouve cette réponse nulle en sécurité. Merci! 1 up!
hubert17