C# volání funkce
zdravím, mám takový problém, když zavolám funkci tak mi přepíše i parametr té funkce se kterým jsem ho volal, asi je chyba v definici, může mi prosím někdo napsat jak to má být? Díky
public string[,] TahCerny(Tah t, string[,] sachovniceT)
{
if (Math.Abs(t.xKon - t.xPoc) <= 1 && Math.Abs(t.yKon - t.yPoc) <= 1)
{
sachovniceT[t.xPoc, t.yPoc] = " _ ";
sachovniceT[t.xKon, t.yKon] = " B ";
}
else
{
sachovniceT[t.xPoc, t.yPoc] = " _ ";
sachovniceT[(t.xKon + t.xPoc) / 2, (t.yKon + t.yPoc) / 2] = " _ ";
sachovniceT[t.xKon, t.yKon] = " B ";
}
return sachovniceT;
}
definice:
string[,] sachovniceTemp = new string[9, 9];
a to volání:
sachovniceTemp = TahCerny(tah, sachovniceTah);
pole aj string je referencny typ
http://msdn.microsoft.com/en-us/library/s6938f28%2 8v=vs.80%29.aspx
String je sice referenční, ale zároveň immutable, takže tam by to nevadilo.
tak to uz neviem ale v kazdom pripade ked chce "temp" sachovnicu tak si ju musi vytvorit sam :) Inac potom ani nema vobec zmysel tam navratova hodnota ked nevytvori novu sachovnicu.
... resp vlastne on tu temp sachovnicu vytvoril takze robi uplnu blbost ked tam zas priradzuje do premennej sachovnicaTemp odkaz na original sachovnicu (navr.hodnotu fcie)
To dotazovatel: SachovnicaTemp daj ako parameter funkcie a funkcia bude bez navratovej hodnoty.
Díky za reakce, potřebuju ale vytvořit kopii toho sachovniceTah do sachovniceTemp aby byla na ní nezávislá a neměnily se obě dvě když změním jednu.
asi jedinou moznost jsem nasel fyzicky to po indexech zkopirovat :(
keby si to robil jak clovek, tak by si mal pole cisel a ne stringov jak uz pisal nizsie los, to by mohlo ist kopirovat nejakou fciou na kopiu pola alebo kopiu useku pamate apod. Ale je to fuk mozes to kopirovat aj v cykle. Praca s textovymi stringami je VELMI neefektivna a u sachu je efektivita vypoctov imho dost zasadne kriterium.
Otazka je vobec naco potrebujes temp sachovnicu :)
Prečo si pamätáš šachovnicu ako pole 9x9? Prečo máš v hodnotách tie medzery? Prečo si tam pamätáš reťazce, keď ti stačia čísla (resp. enum)? Pole má metódu Clone, takže nemusíš kopírovať po jednom prvku.