为什么string.contains()返回false?
我有以下字符串:\\\?\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();
假设你已经检查了字母“O”与数字“0”和类似的事情,我建议你在看到串字符串变量devPathName
正在编码显示,并不完全符合您的想法。
例如,如果字符串包含字符\x000d
(Control-M
),Visual Studio调试器将在您检查字符串的值时显示为\r
。或者,又例如,如果字符串包含序列3504(三五零四),但是您改为搜索35O4
(三五五四),那么您将找不到匹配。
(根据您的字体,你可能无法看到某些字符之间的差异。比较“0O1lB8S5”在不同的字体“0O1lB8S5
”看到我的意思。)
嗯......你的意思是我需要使用UnicodeEncoding转换它吗?我实际上从IntPtr(`devPathName = Marshal.PtrToStringAuto(pdevPathName);`)中检索该字符串,但是请你解释一下你的意思? 谢谢 – 2009-06-29 03:13:29
@ dark-star1 - 更新了我的回答并加以澄清,希望这个更清楚。 – Bevan 2009-06-29 04:34:08
你和Pat似乎已经击中了头部。试图使用Path。*抛出异常,表明在那里有'\ r'和'\ n'。我猜这是在返回的字符串的开始。有没有办法旁边这一步或我必须复制字符串,修改,然后测试它为我的子字符串? – 2009-06-29 13:03:03
当我将代码粘贴到C#中时,编译器不喜欢长字符串的“\ h”部分。它说,“无法识别的转义序列”。这可能是你的问题吗?
哦,如果我在长字符串之前放一个“@”,contains()方法返回true。
HTH,
-Dan
我也得到了这些结果。 – JeffH 2009-06-29 03:17:00
这对我来说就返回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不会被改变对你而且值是你所期望的。
对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
也许你只是看着该字符串的第一行?
你只需要通过。载有()解析它之前逃脱长字符串
把一个在符号的字符串的开始(@),这表现在几个以前的答案,它应该的完美评估。
当踏入。载,初始字符串,你的情况
\\\?\hid#vid_04d8pid_003f#62edf110800000#{4d1e55b2-f16f-11cf-88cb-001111000030}"
包含非转义字符,并导致。载终止它完成比较之前。
它在我的机器上返回true。您可能想要提供有关该代码上下文以及如何测试的更多信息。 – 2009-06-29 03:25:41