2015-05-14 46 views
3

我很抱歉,如果這是一個明顯的答案,但我無法在StackOverflow或Google上找到與此行爲有關的任何內容。我是自學C#的,並且正在編寫一個涉及使用用戶名/密碼對的程序。在這種情況下,我使用.Exist()來確定用戶名是否已經在我的用戶名數組中。Array.Exist()只識別數組的最後一個元素

static bool LookUpS(string targ, string[] arr) 
    { 
     if (Array.Exists(arr, e => e == targ)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

的參數targ來自用戶,和參數arr寫入程序來指定應該搜索哪個數組(這是使我可以在不同的陣列使用LookUpS)。我現在正在測試的數組來源於文本文檔。我已經測試過,以確認從.txt到數組的轉換工作正常。

現在到了實際問題。我用幾個值填充了文本文件:「木星」,「海王星」,「土星」,「火星」。如果我將前三個中的任何一個傳遞給LookUpS,它將返回false,儘管它們確實存在。然而,我不明白的部分是,如果我將「火星」(或任何最後一個值碰巧)傳遞給函數,它將返回true。如果我要刪除「火星」值,LookUpS會說「土星」是true而不是其他。任何人都可以提供一些解釋嗎?如果這可以幫助找出問題,我可以張貼更完整的程序圖片。

+0

您是否在'Exists'委託中放置了一個斷點來調試數組中的每個值,因爲它是迭代的? – xxbbcc

+2

如何將.txt文件轉換爲數組?可能是'arr'中的字符串包含一個換行符,除了最後一個。 – Glorfindel

+3

我會說分割字符串有問題。嘗試打印'string.Join(「|」,arr)'並查看'|'是否有空格。 – xanatos

回答

0

在你提到的意見你說,你拆分線用\ n作爲分隔符。但是在Windows上使用\ r \ n。因此,您的分割字符串數組將包含

  • XXXX \ r
  • YYYY \ r
  • lastUser

最後一行不包含換行,這將正常工作。

這就解釋了爲什麼你在數組中的搜索只能找到數組中的最後一個用戶。傳遞給拆分操作不是\ r,而是傳遞給Environment.NewLine.ToCharArray()以刪除字符串數組中的所有換行符。

+0

謝謝!我應該已經意識到,因爲當我迭代數組時,回車,但行並沒有改變。我認爲這是.Write()的副產品。我也接受了Malte R的建議,並且一切正常。 –

+0

而不是按照你的建議在'Environment.NewLine.ToCharArray()'上進行分割,他可以使用不同的重載並在'new [] {Environment.NewLine}'上分割。 –

0

陣列具有built-in method called contains()應該做的正是你想要的...

​​
+2

這並不能解釋爲什麼現有的代碼不起作用 - 而「Contains」更簡單,我希望原代碼能夠工作。 –

+0

我現在嘗試使用包含,它仍然無法正常工作。可能是因爲格洛芬德爾對\ n的正確說法。 –

+0

在這種情況下,這裏的問題似乎是您的輸入數據,而不是您用來測試它的方法。這裏要做的最好的事情是迭代數組的內容(或者調試它),並找出實際值。 – Karl

0

您可以將其簡化爲這樣的事情。 如果你喜歡,你可以使用Exists()而不是Any()。

static bool LookUpS(string targ, string[] arr) 
    { 
     return (arr.Any(s => s == targ)) 
    } 

或者,如果你希望它是不區分大小寫:

static bool LookUpS(string targ, string[] arr) 
    { 
     return (arr.Any(e => String.Equals(e, targ, StringComparison.CurrentCultureIgnoreCase)); 
    } 

或者,就像卡爾建議,可以使用包含()

static bool LookUpS(string targ, string[] arr) 
     { 
      return (arr.Contains(targ); 
     } 

有時簡化你的代碼可以解決一些問題:)

之所以不需要使用if .. else來返回truefalse,是方法任何(),存在()和包含()返回是布爾,所以你可以只返回方法調用如示例

+0

我看不出爲什麼你當前的代碼不能工作,但也許這可以幫助你。 –

相關問題