2017-07-05 2 views
2

Kann mir jemand erklären, warum der obere Teil des Codes funktioniert, aber wenn der Test ein Array ist es nichtC# String-Array enthält

 string test = "Customer - "; 
     if (test.Contains("Customer")) 
     { 
      test = "a"; 
     } 

Der folgende Code nicht

 string[]test = { "Customer - " }; 
     if (test.Contains("Customer")) 
     { 
      test[0]= "a"; 
     } 
+0

Die beiden Arten starten - 'string' & 'string []' - sind unterschiedlich, daher ist die Methode '.Contains' für jede eine andere Methode, obwohl sie denselben Namen hat und jede eine andere Sache tut. – Enigmativity

Antwort

6
funktioniert

Im ersten Fall rufen Sie String.Contains, die überprüft, ob Zeichenfolge Teilzeichenfolge enthält.
Diese Bedingung gibt also true zurück.

Im zweiten Fall rufen Sie Enumerable.Contains auf string[], die überprüft, ob String-Array einen bestimmten Wert enthält.
Da es keine "Customer" Zeichenfolge in Ihrer Sammlung gibt, gibt es false zurück.

Dies sind zwei ähnlich genannte, aber tatsächlich unterschiedliche Methoden verschiedener Typen.

Wenn Sie, wenn eine Zeichenfolge in Sammlung überprüfen mögen enthält „Kunden“ als Teil, dann können Sie LINQ .Any() verwenden:

if (test.Any(s => s.Contains("Customer")) 
{ 
    test[1] = "a"; 
} 
1

Ersten Schnipsel suchen nach String Customer in einer anderen Zeichenfolge Customer -, das funktioniert, aber in der zweiten Snippet-String Customer wird innerhalb eines Arrays von Strings durchsucht, von denen einer Customer - ist. Daher gibt die zweite falsch aus.

Dies ergibt sich aus, wie Sie Test erklären

string test = "Customer - "; 

ODER

string[] test = { "Customer - " }; 

Beachten Sie die geschweiften Klammern. Das ist, wie Sie eine Sammlung (Array hier) definieren

Zum zweiten Schnipsel Arbeit zu machen, sollten Sie

string[] test = { "Customer - " }; 
if (test.Any(x => x.Contains("Customer"))) 
{ 
    test[1] = "a"; 
} 
+0

Danke Ich denke, das zweite Snippet ist ein wenig irreführend, weil es nach einer genauen Übereinstimmung sucht und nicht nach einem echten enthält. Mein Testfeld hat mehr Werte als ich hier angegeben habe. Wie überprüfe ich den Index dafür, wenn? –

+0

Sie müssen eine einfache alte for-Schleife von '0' nach' array.length-1' ausführen. Wenn der Wert gefunden wird, ist der Schleifenwert der Index. Ansonsten kannst du es mit linq machen. https://stackoverflow.com/a/10443540/1011959 –

0

Da in zweiten Fall tun, um Ihre wenn Bedingung falsch ist, wie Sie sind für die erste String in Array von Strings suchen . Entweder können Sie jedes Keyword verwenden für jede Zeichenfolge in dem Array zu suchen, die Kunden entsprechen oder Sie können Test suchen [0] ersten String in Array suchen, wenn es um Kundenspiele wie:

if (test[0].Contains("Customer")) 
    { 
     //your rest of the code here 
    } 


if (test.Any(x => x.Contains("Customer"))) 
    { 
     //your rest of the code here 
    } 
+0

Sie verstehen den Kontext der Frage nicht, also ist letztlich Ihre gegebene Antwort falsch. Entfernen oder bearbeiten Sie Ihre Antwort. –

0
string test = "Customer - "; 
if (test.Contains("Customer")) 
{ 
    test = "a"; 
} 

In dieser Enthält ist eine String-Klasse-Methode, die Basis von IEnumerable Prüfungen ist

"Customer -" mit Customer.

Aber

string[]test = { "Customer - " }; 
if (test.Contains("Customer")) 
{ 
    test[1]= "a"; 
} 

An dieser Stelle enthält, ist ein IEnumerable Methode ist es Basis von IEnumerable prüft.Also, es funktioniert nicht Sie den Code ändern

string[] test = { "Customer - " }; 
if (test.Any(x => x.Contains("Customer"))) 
{ 

} 

Test [1] = "a" Es ist throw Exception, weil die Feldposition mit 0 nicht 1