2009-06-29 254 views
1

我有以下字符串:\\\?\hid#vid_04d8pid_003f#62edf110800000#{4d1e55b2-f16f-11cf-88cb-001111000030}存儲在字符串變量(從一個函數調用)稱爲devPathName爲什麼string.contains()返回false?

和下列定義:const string myDevice = @"vid_04d8pid_003f";

但下面的代碼總是評估爲假:

Boolean test = true; 

test = devPathName.Contains(myDevice); 

statusLabel.Text += "\n\tThe value of test: " + test.ToString(); 
+2

它在我的機器上返回true。您可能想要提供有關該代碼上下文以及如何測試的更多信息。 – 2009-06-29 03:25:41

回答

2

假設你已經檢查了字母「O」與數字「0」和類似的事情,我建議你在看到串字符串變量devPathName正在編碼顯示,並不完全符合您的想法。

例如,如果字符串包含字符\x000dControl-M),Visual Studio調試器將在您檢查字符串的值時顯示爲\r。或者,又例如,如果字符串包含序列3504(三五零四),但是您改爲搜索35O4(三五五四),那麼您將找不到匹配。

(根據您的字體,你可能無法看到某些字符之間的差異。比較「0O1lB8S5」在不同的字體「0O1lB8S5」看到我的意思。)

+0

嗯......你的意思是我需要使用UnicodeEncoding轉換它嗎?我實際上從IntPtr(`devPathName = Marshal.PtrToStringAuto(pdevPathName);`)中檢索該字符串,但是請你解釋一下你的意思? 謝謝 – 2009-06-29 03:13:29

+0

@ dark-star1 - 更新了我的回答並加以澄清,希望這個更清楚。 – Bevan 2009-06-29 04:34:08

+0

你和Pat似乎已經擊中了頭部。試圖使用Path。*拋出異常,表明在那裏有'\ r'和'\ n'。我猜這是在返回的字符串的開始。有沒有辦法旁邊這一步或我必須複製字符串,修改,然後測試它爲我的子字符串? – 2009-06-29 13:03:03

7

當我將代碼粘貼到C#中時,編譯器不喜歡長字符串的「\ h」部分。它說,「無法識別的轉義序列」。這可能是你的問題嗎?

哦,如果我在長字符串之前放一個「@」,contains()方法返回true。

HTH,

-Dan

+0

我也得到了這些結果。 – JeffH 2009-06-29 03:17:00

0

這對我來說就返回true,好。


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      const string myDevice = @"vid_04d8pid_003f"; 
      string devPathName = @"\\\?\hid#vid_04d8pid_003f#62edf110800000#{4d1e55b2-f16f-11cf-88cb-001111000030}"; 
      Boolean test =devPathName.Contains(myDevice); 
      MessageBox.Show("\n\tThe value of test: " + test.ToString()); 
     } 
    } 
} 

我想我會把一個斷點,並確保devPathName不會被改變對你而且值是你所期望的。

0

對false,您的測試變量或statusLabel.text中顯示的一部分進行什麼評估?你確定顯示器不是這樣的:

The value of test: false 
The value of test: false 
The value of test: false 
The value of test: false 
The value of test: true 
The value of test: false 

也許你只是看着該字符串的第一行?

0

你只需要通過。載有()解析它之前逃脫長字符串

把一個在符號的字符串的開始(@),這表現在幾個以前的答案,它應該的完美評估。

當踏入。載,初始字符串,你的情況

\\\?\hid#vid_04d8pid_003f#62edf110800000#{4d1e55b2-f16f-11cf-88cb-001111000030}" 

包含非轉義字符,並導致。載終止它完成比較之前。

相關問題