2017-06-07 4 views
3

Diese meine VB-Code ist:Converting VB-Code unter Verwendung von C# Array und ReDim Erhalter Schlüsselwort

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 

Dies ist mein konvertierte Code in C#;RefStrLinks deklariert als:

string[,] RefStrLinks = null; 

Aber das gibt einen Compiler-Fehler wegen ReDim Preserve, wenn ich dies auszuführen:

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

Hat jemand verstehen, warum?

+1

Bitte lesen: [fragen] und nehmen Sie die [tour] wir sind keine Umwandlung Website – Mederic

+0

* Was * ist der genaue Fehler, den Sie bekommen und *wo bekommst du das her? Auf jeden Fall sollten Sie eine 'List ' anstelle eines 'Array ' verwenden, um Elemente aus Ihrer Sammlung bei Bedarf hinzufügen und entfernen zu können. – HimBromBeere

+1

Warum würde Ihr C# -Code "Kompilierungsfehler wegen" ReDim Preserve "geben, wenn Ihr C# * * ReDim Preserve" nicht enthält? Ich bin verwirrt ... aber ich denke nicht, dass das der eigentliche Fehler ist Sie sehen ... –

Antwort

5

Richtig; Ich denke, das wirkliche Problem hier ist, dass Sie ein zweidimensionales Array haben; RefStrLinks ist kein string[], sondern ein string[,], mit Dimension 2 auf der ersten Achse. Array.Resizefunktioniert nur mit Vektoren (ein "Vektor" ist ein eindimensionales Array mit Basisindex 0, d. H. string[]).

Ehrlich gesagt, ich würde all dies ersetzen (Re-Dimmen einen Array oder mit Array.Resize pro Element ist absurden teuer) mit so etwas wie:

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

wo vielleicht SomeBasicType eine unveränderlichen Struktur ist, die zwei Takes Saiten. Oder einfacher, in C# „aktuell“: value-Typ Tupel:

// 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}"); 
} 
Verwandte Themen