2017-06-07 1 views
3

Ceci est mon code VB:Conversion code VB à C# en utilisant tableau et mot-clé redim Preserver

If TxtStr(i) = "#" And TxtStr(i + 1) = "]" Then 
    RefStr = RefStr & "]" 
    ReDim Preserve RefStrLinks(1, RefStrLinkIndex) 
    RefStrLinks(0, RefStrLinkIndex) = RefStr 
    RefStr = RefStr.Replace("[#", String.Empty) 
    RefStr = RefStr.Replace("#]", String.Empty) 
    RefStrLinks(1, RefStrLinkIndex) = RefStr 
    RefStrLinkIndex = RefStrLinkIndex + 1 
    RefStr = String.Empty 
    RefStrFound = False 
End If 

Ceci est mon code converti en C#;RefStrLinks est déclarée comme:

string[,] RefStrLinks = null; 

Mais cela donne une erreur de compilation en raison de ReDim Preserve chaque fois que je lance ceci:

if (TxtStr[i].ToString() == "#" & TxtStr[i + 1].ToString() == "]") 
{ 
    RefStr = RefStr + "]"; 
    Array.Resize<string>(ref RefStrLinks, RefStrLinkIndex + 1); 
    RefStrLinks[0, RefStrLinkIndex] = RefStr; 
    RefStr = RefStr.Replace("[#", string.Empty); 
    RefStr = RefStr.Replace("#]", string.Empty); 
    RefStrLinks(1, RefStrLinkIndex) = RefStr; 
    RefStrLinkIndex = RefStrLinkIndex + 1; 
    RefStr = string.Empty; 
    RefStrFound = false; 
} 

-ce que quelqu'un comprend pourquoi?

+1

S'il vous plaît lire: [demander] et prendre le nous [visite] pas un site de conversion – Mederic

+0

* Qu'est-ce que * est l'erreur exacte que vous obtenez et *Où l'obtiens-tu? Quoi qu'il en soit, vous devriez envisager d'utiliser un 'List ' au lieu d'un 'Array ' pour pouvoir ajouter et supprimer des éléments de votre collection si nécessaire. – HimBromBeere

+1

pourquoi votre code C# donnerait-il une erreur de compilation à cause de "ReDim Preserve" ', quand votre C# * n'inclut pas *' ReDim Preserve "? Je suis confus ... mais je ne pense pas que ce soit l'erreur réelle vous voyez ... –

Répondre

5

Droite; Je pense que le vrai problème ici est que vous avez un tableau bidimensionnel; RefStrLinks n'est pas un string[], mais plutôt un string[,], avec la cote 2 sur le premier axe. Array.Resizene fonctionne qu'avec des vecteurs (un "vecteur" est un tableau unidimensionnel avec l'indice de base 0, c'est-à-dire string[]).

Franchement, je remplacerais tout cela (re-gradation d'un tableau ou en utilisant Array.Resize par élément est absurdement cher) avec quelque chose comme:

List<SomeBasicType> list = ... 
... 
// where "foo" and "bar" are the two values that you intend to store per item 
var item = new SomeBasicType(foo, bar); 
list.Add(item); 

où peut-être SomeBasicType est une struct immuable qui prend deux cordes. Ou plus simplement, en C# « en cours »: tuples valeur de type:

// declare the list (change the names to something meaningful for your code) 
var list = new List<(string name, string url)>(); 

// ... add values efficiently 

string name = "whatever"; // your per-item code goes here 
string url = "some value"; // and here 
list.Add((name, url)); 

// ... show that we have the data 

foreach(var item in list) 
{ 
    Console.WriteLine($"{item.name}/{item.url}"); 
}