2009-06-29 209 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}" 

包含非转义字符,并导致。载终止它完成比较之前。

相关问题