Entwickler-Ecke

C# - Die Sprache - LINQ und mehrdimensionales Array


coolace - Di 08.11.11 20:17
Titel: LINQ und mehrdimensionales Array
Hy,

ich habe folgendes Problem und komm trotz googele und ein paar brauchbare Treffer nicht
dahinter wie ich folgendes Löse.

2 dimensionales Array

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
     
string[,] bilderarryzuordung;

public Bildauswahl(string name, string[,] bildernamenarry, string Pfadangabe)
{          
   //jede Menge Code aber nur der Teil ist relevant
            bilderarryzuordung = bildernamenarry;                                 


//Hier ist mein Problem, ich reagiert auf ein event
private void comboBox1_TextChanged(object sender, EventArgs e)
 {
            var bildquery = from abfrage in bilderarryzuordung where abfrage = p1.Image.ToString() select abfrage;
            bilderarryzuordung[Convert.ToInt32(), 0] = namenauswahl[Convert.ToInt32(comboBox1.Items), 0];
 }

Ich bekomme immer in dem unteren Teil das Problem das der Compiler sagt:
Fehler 2 Es konnte keine Implementierung des Abfragemusters für den Quelltyp "string[*,*]" gefunden werden. "Where" wurde nicht gefunden. Möglicherweise fehlt ein Verweis auf "System.Core.dll" oder eine Using-Direktive für "System.Linq". C:\Dokumente und Einstellungen\Administrator\Desktop\Dateienumbennen\Dateienumbennen\Bildauswahl.cs 105 45 Dateienumbennen

Wie durchsucht man also ein mehrdimensionaliges Array um die Position festzustellen ?

Gruß

Erlborland

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Kha - Di 08.11.11 20:56

Direkt jedenfalls gar nicht. Überlege dir mal, wie man eine Methode

C#-Quelltext
1:
static IEnumerable<T> Flatten<T>(T[,] a)                    

implementieren könnte.


coolace - Di 08.11.11 22:31

Danke schon mal für den Typ, er kann meine Liste nicht durchsuchen
weil Sie nicht IEnumerable ist.

Aber ich glaub ich steh auf dem Schlauch aber mir fällt gerade keine passende
Möglichkeit an diese zu implementieren, das funzt irgendwie nicht


C#-Quelltext
1:
2:
 IEnumerable<string[,]> bildquery = bilderarryzuordung[,]
         from abfrage in bilderarryzuordung where abfrage = p1.Image.ToString() select abfrage;


Gruß

coolace

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


Christian S. - Di 08.11.11 22:53

user profile iconcoolace hat folgendes geschrieben Zum zitierten Posting springen:
Aber ich glaub ich steh auf dem Schlauch
Besimmt sogar! 130 Postings und markierst Deinen Quelltext immer noch nicht als C#-Quelltext :mrgreen:


Th69 - Mi 09.11.11 10:56

Hallo coolace,

folgender Code compiliert zumindestens:

C#-Quelltext
1:
2:
3:
string[,] bilderarrayzuordnung = new string[23] { { "x""y""z" }, { "a""b""x" } };
var bildquery = from string abfrage in bilderarrayzuordnung where abfrage == "x" select abfrage;
var list = bildquery.ToList();

Beachte die explizite Angabe des Datentyps 'string' in der from-Klausel.

Jedoch scheint m.E. diese Linq-Abfrage bei dir sowieso der falsche Ansatz zu sein, denn du möchtest ja anscheinend den Eintrag in dem Array dann ersetzen (d.h. du benötigst den Index - bisher kriegst du aber einfach nur eine Liste der Strings zurück).


Ligatur - Do 10.11.11 00:40

Hallo,

Vergleiche mal

C#-Quelltext
1:
where abfrage = p1.Image.ToString()                    

mit

C#-Quelltext
1:
where abfrage == "x"                    

Fällt was auf?


pdelvo - Do 10.11.11 01:00

So ein Zufall. Vor etwa 20mins gebraucht

C#-Quelltext
1:
2:
3:
4:
Zieltyp[,] = ...;

from x in arr.Cast<Zieltyp>()
where IsAnswer(42)...


coolace - Do 10.11.11 22:01

Hallo,

sorry für die späte Rückantwort, war ein bissel Krank geworden.

@Christian S: Vielen Dank für den Hinweis, ich werde mich natürlich
an die BoardRegeln halten und das ganze mit code und /code entsprechend
markieren.

@Rest: Vielen Dank, es stimmt er kompiliert.
Ich hoffe nun, über die List die Position herauszubekommen.

Was ich noch nicht ganz kapiert habe ist das hier ?

C#-Quelltext
1:
static IEnumerable<T> Flatten<T>(T[,] a)                    


Gruß

Coolace

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


pdelvo - Do 10.11.11 22:29

Er meinte damit, das du dir eine Methode überlegen solltest, die aus einem zweidimensionalen Array eine Enumeration (zB eine liste) macht. Das macht in meinem Fall die eingebaute Cast<T>() Methode. Vieleicht übelegst du dir das mal rotzdem. Schaden kanns ja nicht^^


coolace - Fr 11.11.11 20:38

ah, ok. dann habe ich es verstanden.
Ich danke allen beteiligten für Ihre kompetente Hilfe.

Gruß

Coolace