Gut kopiert ist halb gewonnen.

So funktionierts:
// ArrayList convert to Array
string[] checkArr =  new string[checkArrList.Count];

//checkArr = (string[]) checkArrList.ToArray(checkArr.GetType());
checkArrList.CopyTo(checkArr,0);

Mich h�tte trotzdem interessiert, warum er sich beim casten so borstig
gibt. Schlie�lich gibt es die ToArray(type) Methode ja nicht umsonst.

Vielen Dank, Daniel!

-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im Auftrag von Daniel Fisher
Gesendet: Dienstag, 16. September 2003 11:18
An: [EMAIL PROTECTED]
Betreff: [Csharp.net] AW: [Csharp.net] wo wir grad bei bl�den Fragen
sind ;-) ... hier ist eine zu ArrayList casting

using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Creates and initializes the source ArrayList.
      ArrayList mySourceList = new ArrayList();
      mySourceList.Add( "three" );
      mySourceList.Add( "napping" );
      mySourceList.Add( "cats" );
      mySourceList.Add( "in" );
      mySourceList.Add( "the" );
      mySourceList.Add( "barn" );

      // Creates and initializes the one-dimensional target Array.
      Array myTargetArray=Array.CreateInstance( typeof(String), 15 );
      myTargetArray.SetValue( "The", 0 );
      myTargetArray.SetValue( "quick", 1 );
      myTargetArray.SetValue( "brown", 2 );
      myTargetArray.SetValue( "fox", 3 );
      myTargetArray.SetValue( "jumped", 4 );
      myTargetArray.SetValue( "over", 5 );
      myTargetArray.SetValue( "the", 6 );
      myTargetArray.SetValue( "lazy", 7 );
      myTargetArray.SetValue( "dog", 8 );

      // Displays the values of the target Array.
      Console.WriteLine( "The target Array contains the following
(before and after copying):" );
      PrintValues( myTargetArray, ' ' );

      // Copies the second element from the source ArrayList to the
target ArrayList, starting at index 7.
      mySourceList.CopyTo( 1, myTargetArray, 7, 1 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source ArrayList to the target ArrayList,
starting at index 6.
      mySourceList.CopyTo( myTargetArray, 6 );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );

      // Copies the entire source ArrayList to the target ArrayList,
starting at index 0.
      mySourceList.CopyTo( myTargetArray );

      // Displays the values of the target Array.
      PrintValues( myTargetArray, ' ' );
   }

   public static void PrintValues( Array myArr, char mySeparator )  {
      System.Collections.IEnumerator myEnumerator =
myArr.GetEnumerator();
      int i = 0;
      int cols = myArr.GetLength( myArr.Rank - 1 );
      while ( myEnumerator.MoveNext() )  {
         if ( i < cols )  {
            i++;
         } else  {
            Console.WriteLine();
            i = 1;
         }
         Console.Write( "{0}{1}", mySeparator, myEnumerator.Current );
      }
      Console.WriteLine();
   }
}
/* 
This code produces the following output.

The target Array contains the following (before and after copying):
 The quick brown fox jumped over the lazy dog      
 The quick brown fox jumped over the napping dog      
 The quick brown fox jumped over three napping cats in the barn   
 three napping cats in the barn three napping cats in the barn
*/

-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Im Auftrag von elni
Gesendet: Dienstag, 16. September 2003 10:04
An: [EMAIL PROTECTED]
Betreff: [Csharp.net] wo wir grad bei bl�den Fragen sind ;-) ... hier
ist eine zu ArrayList casting



Hallo Zusammen!
Ich bin neu in der Liste und ebenfalls neu in C#.
Ganz so doof scheint mein Problem aber nicht zu sein, denn ich habe das
Thema auch schon bei csharphelp.com diskutiert und so eine richtige
L�sung kennt dort auch keiner.

Im Prinzip geht es nur darum eine ArrayList in einen string[] Array
(doppelt gemoppelt) zu dr�cken. Kompilieren geht, nur zur Laufzeit wirft
er einen seltsamen Fehler. Das Umwandeln scheint um einiges
umst�dnlicher als in Java. Warum es jetzt trotzdem noch hakt ist mir ein
bischen schleierhaft...

[...]
ArrayList checkArrList = new ArrayList();
int i = 0;
while ((input=sr.ReadLine())!=null)
{
        checkArrList.Add(input + " / " + (i+1));
this.tb_debug.Text += checkArrList[i];
        i++;
}
sr.Close();

// ArrayList convert to Array (hierum dreht es sich)
string[] checkArr =  new string[checkArrList.Count];

checkArr = (string[]) checkArrList.ToArray(checkArr.GetType());

// Array output to CheckedListbox
this.lbx_ergebnis.Items.AddRange(checkArr);
[...]

Wirft zu Laufzeit folgenden Fehler:
System.InvalidCastException: 
At least one element in the source array could not be cast down to the
destination array type.

at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array
destinationArray, Int32 destinationIndex, Int32 length) at
System.Collections.ArrayList.ToArray(Type type)

ciao,
Elmar

_______________________________________________
Csharp.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/csharp.net

_______________________________________________
Csharp.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/csharp.net

_______________________________________________
Csharp.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/csharp.net

Antwort per Email an