none
System.Array enthält keine Definition für Contains RRS feed

  • Frage

  • Ich möchte in einem Programm (C#) überprüfen ob ein Array b den wert a enthält. Dazu wollte ich b.Contains(a) verwenden, denn das hat schon bei einem anderen Projekt funktioniert. Diesmal jedoch nicht, ich bekomme die Fehler Meldung wie in der Überschrift. Kann mir jemand helfen?

    static String Test(Int32 a, Array b)
            {
                Boolean ASDF = false;
                String c = "";
    
                for (int i = 0; i < b.Length; i++)
                {
                    ASDF = b.Contains(a);
                }
    
                if (ASDF == true)
                {
                    c = "b enthält nicht a";
                }
    
                if (ASDF == false)
                {
                    c = "b enthält nicht a";
                }
                
                return c;
            }

    Sonntag, 1. September 2013 16:53

Antworten

  • Als erstes solltest du nicht Array sondern einen speziellen Arraytyp in deiner Methode annehmen. Da du auf das Enthalten eines Int32 prüfst, solltest du auch ein Int32[] verlangen:

    static String Test(Int32 a, Int32[] b)

    Sobald du das änderst, wird es auch funktionieren.
    Das Problem an deinem Code besteht darin, das Array keien spezifischen Elementtyp aufweist.

    Falls deine Methode führ mehrere Typen funktionieren soll, so solltest du auf Generic setzen.

            static String Test<T>(T a, T[] b)
    Den Rest des Codes brauchst du nicht abändern. T entspricht einfach dem Typ der Elemente im Array. Der Aufruf ändert sich deswegen auch nicht.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert 11011100 Sonntag, 1. September 2013 18:26
    Sonntag, 1. September 2013 18:19
    Moderator

Alle Antworten

  • Hallo,
    die Contains-Methode ist eine Erweiterung aus dem System.Linq-Namespace. Diesen musst du also erst hinzufügen:

    using System.Linq;

    Verfügbar ist die Methode erst ab .NET 3.5.

    Noch ein kleiner Hinweis zu deinem Code: Die for-Schleife kannst du weg lassen, diese macht in diesem Zusammenhang keinen Sinn, da der mehrfache aufruf von .Contains keine Veränderung bringt.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Sonntag, 1. September 2013 16:59
    Moderator
  • Stimmt, das mit dem For ist ein wenig sinnlos.

    "using System.Linq;" hab ich aber.

    Sonntag, 1. September 2013 17:03
  • Hier nochmal Alles:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication2
    {
        class Program
        {
            
            static String Test(Int32 a, Array b)
            {
                Boolean ASDF = false;
                String c = "";
                
                ASDF = b.Contains(a);
                
                if (ASDF == true)
                {
                    c = "b enthält nicht a";
                }
                if (ASDF == false)
                {
                    c = "b enthält nicht a";
                }
                
                return c;
            }
           
            static void Main(string[] args)
            {
                Int32[] Tipps = new Int32[10];
                Tipps[0] = 1;
                Tipps[1] = 2;
                Console.WriteLine(Test(2, Tipps));
                Console.Read();
    
            }
        }
    }

    Sonntag, 1. September 2013 17:07
  • Ich sehe gerade da steht noch mehr dazu, vieleicht hilft das weiter:

    Fehler    1    'System.Array' enthält keine Definition für 'Contains', und die Überladung der optimalen Erweiterungsmethode 'System.Linq.Queryable.Contains<TSource>(System.Linq.IQueryable<TSource>, TSource)' weist einige ungültige Argumente auf.  

    Fehler    2    Instanzenargument: Konvertierung von 'System.Array' in 'System.Linq.IQueryable<int>' ist nicht möglich.   

    Sonntag, 1. September 2013 17:39
  • Als erstes solltest du nicht Array sondern einen speziellen Arraytyp in deiner Methode annehmen. Da du auf das Enthalten eines Int32 prüfst, solltest du auch ein Int32[] verlangen:

    static String Test(Int32 a, Int32[] b)

    Sobald du das änderst, wird es auch funktionieren.
    Das Problem an deinem Code besteht darin, das Array keien spezifischen Elementtyp aufweist.

    Falls deine Methode führ mehrere Typen funktionieren soll, so solltest du auf Generic setzen.

            static String Test<T>(T a, T[] b)
    Den Rest des Codes brauchst du nicht abändern. T entspricht einfach dem Typ der Elemente im Array. Der Aufruf ändert sich deswegen auch nicht.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert 11011100 Sonntag, 1. September 2013 18:26
    Sonntag, 1. September 2013 18:19
    Moderator
  • Danke. Jetzt gehts.
    Sonntag, 1. September 2013 18:27