Είσαι σίγουρος? Μήπως διαβάζεις λάθος αρχείο? Μήπως το αρχείο σου περιέχει λιγότερα | απ' ότι νομίζεις? Αν υπήρχε τόσο χοντρό πρόβλημα θα είχε εντοπιστεί 12 χρόνια πριν, άσε που θα επηρέαζε όλους τους προγραμματιστές.
Και μόνο το ότι περίμενες η Split να χρησιμοποιήσει την μνήμη του StringArray μου λέει ότι δεν έχεις καταλάβει πως δουλεύουν τα assignments. Το περιεχόμενο του StringArray έχει αντικατασταθεί από το αποτέλεσμα της string.Split, δεν έχει γεμίσει από αυτό. Αν είχες 15 | στο αρχείο σου, θα έβλεπες ένα array με 15 elements.
Το ότι δεν μπορώ να επαναλάβω τα αποτελέσματα σου φυσικά είναι αυτονόητο. Το παρακάτω τρέχει χωρίς κανένα πρόβλημα. Πρόσεξε και το Object.ReferenceEquals στο τέλος, που μου λέει ότι η String.Split επιστρέφει πάντα διαφορετικό object, δεν ξαναχρησιμοποιεί τον ίδιο πίνακα:
static void Main(string[] args)
{
using (var reader = new StreamReader("TextFile1.txt"))
{
string theString=null;
string[] stringArray=new string[5];
Debug.Assert(stringArray.Length==5);
Array.Clear(stringArray, 0, 4);
Debug.Assert(stringArray.Length == 5);
string pipes = reader.ReadLine();
Debug.Assert(pipes.Length == 4);
Debug.Assert(pipes == "||||");
string[] splits = pipes.Split('|');
Debug.Assert(splits.Length == 5);
stringArray=pipes.Split('|');
Debug.Assert(stringArray.Length == 5);
Debug.Assert(!Object.ReferenceEquals(splits, stringArray));
}
}
Άσε που δεν υπήρχε και κανένας λόγος να γράψεις τόσο κώδικα. Θα μπορούσες να γράψεις απλά:
using (var reader = new StreamReader("TextFile1.txt"))
{
string pipes = reader.ReadLine();
string[] splits = pipes.Split('|');
Debug.Assert(splits.Length == 5);
}
Επειδή έχεις βάλει και ονόματα εταιρειών μήπως θα προτιμούσες να αλλάξεις το post, ή ακόμα και να το διαγράψουμε?
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos