2012-04-13 5 views
1

Ich versuche, LINQ zu verwenden, und ich erhalte immer diese Fehlermeldung:Fehler bei der Verwendung von LINQ mit IList

Operator ‚<‘ kann nicht auf Operanden vom Typ ‚Ilistprac.Location‘ und ‚int‘ angewandt werden

habe ich versucht, eine Überschreibung, aber ich erhalte eine Fehlermeldung:

'Ilistprac.Location.ToInt()': keine geeignete Methode außer Kraft zu setzen

gefunden

Alle IList-Schnittstellen sind auch mit dem IEnurmerable implementiert (nur hier nicht aufgeführt, es sei denn, jemand möchte das).

class IList2 
{ 
    static void Main(string[] args) 
    { 

    Locations test = new Locations(); 
    Location loc = new Location(); 
    test.Add2(5); 
    test.Add2(6); 
    test.Add2(1); 
    var lownumes = from n in test where (n < 2) select n; 


    } 
} 

public class Location 
{ 
    public Location() 
    { 

    } 
    private int _testnumber = 0; 
    public int testNumber 
    { 
     get { return _testnumber; } 
     set { _testnumber = value;} 
    } 

public class Locations : IList<Location> 
{ 
    List<Location> _locs = new List<Location>(); 

    public Locations() { } 

    public void Add2(int number) 
    { 
     Location loc2 = new Location(); 
     loc2.testNumber = number; 
     _locs.Add(loc2); 
    } 

} 

Antwort

1

Sie wollen entweder n.testNumber vergleichen oder Sie müssen den < Operator in der Location Klasse überlasten, so dass Sie es tatsächlich mit einem int vergleichen können.

public class Location 
{ 
    public Location() 
    { 

    } 

    private int _testnumber = 0; 
    public int testNumber 
    { 
     get { return _testnumber; } 
     set { _testnumber = value;} 
    } 

    public static bool operator <(Location x, int y) 
    { 
     return x.testNumber < y; 
    } 

    public static bool operator >(Location x, int y) 
    { 
     return x.testNumber > y; 
    } 
} 
+0

Ok cool das funktioniert. Vielen Dank! – nhat

1

Try

var lownumes = from n in test where (n.testNumber < 2) select n; 
0

Eine weitere Alternative ist eine implizite Konvertierung Operator auf der Location-Klasse zu erstellen, wie so:

public class Location 
{ 
    // ... 
    public static implicit operator int(Location loc) 
    { 
     if (loc == null) throw new ArgumentNullException("loc"); 
     return loc.testNumber; 
    } 
} 

Mit dem oben, wird der Compiler versuchen, diese Umwandlungsoperator auf Location Instanzen anrufen, wenn sie mit Vergleich Int's.

Verwandte Themen