Összehasonlítása kétdimenziós tömbök c # - verem túlcsordulás az orosz
Jó napot, a helyzet a következő:
- példányát tömb tagjai N vonalak, amelyek StringBuilder
- kezdetben a tömbben, minden sor, hogy csere TOE be ++
- ellenőrizze a másolt tömb az eredeti tömb egy módosított tömb.
akkor is, ha a változás nem történik, azaz a feltételeit csere nincs jelen, az összehasonlítás eredménye false eredményt tömbök
Miért? Mit jelent ez a kivételt Cserélje keresés és csere?
Összehasonlításához tömb elemek segítségével, legalább Enumerable.SequenceEqual:
bool isEqual = Enumerable.SequenceEqual (target1, TARGET2);
Kérjük azonban, hogy vinmanie a kódban van egy másik probléma. Amikor másolatot készítünk egy linket a StringBuilder. majd módosítsa az értéket a tartalmát StringBuilder Cserélje módszer. adatmódosítási objektum, amely sslaetsya és az első tömb és másolat.
Helyes azt mondani, hogy nem hoz létre egy példányt sor StringBuilder. létrehoz egy példányt a referencia nekik.
Ne tévesszük össze StringBuilder.Replace string.replace. Ezek teljesen különböző dolog. StringBuilder.Replace tartalmának módosításához magát, és visszatér egy hivatkozás ugyanazon ügyben, hogy talált valamit, hogy cserélje ki, vagy sem. string.replace létrehoz egy új karakterláncot, és visszaadja az arra való utalás, ha változás volt, hogy ha nem, akkor a visszatérési utalás is.
Ha a munka egy sor hivatkozások System.String. Ezután a kódot kapott volna, mint várták.
Ha szükség van, hogy működjön együtt a StringBuilder osztály létrehozásakor példányban kell használnunk, mint például:
Megjegyezzük, hogy az ilyen taktika, akkor ki lesznek téve egy másik lehetséges probléma. Nevezetesen StringBuilder.Equals módszer összehasonlítja nemcsak a húr, amely a benne tárolt, hanem a tulajdonságai kapacitás. és MaxCapacity. amely során változhat manipuláció húrok belsejében StringBuilder.
Az Ön Például, ha a forrás húr van kitéve egyetlen egyszerű változás, a probléma tudna, és nem érintené, de ez egy időzített bomba. Ne csináld ezt. Bármely illetékes programozó látja ezt a kódot, és teszi a te neletsepriyatnoe véleményt.
Válaszol szeptember 12 '16 at 16:17