为什么string.contains()返回false?

时间:2009-06-29 03:00:46

标签: c# .net string

我有以下字符串:\\\?\hid#vid_04d8pid_003f#62edf110800000#{4d1e55b2-f16f-11cf-88cb-001111000030}存储在名为devPathName

的字符串变量(来自函数调用)中

以及以下定义:const string myDevice = @"vid_04d8pid_003f";

但以下代码的结果总是为false:

Boolean test = true;

test = devPathName.Contains(myDevice);

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

5 个答案:

答案 0 :(得分:7)

当我将代码粘贴到C#中时,编译器不喜欢长字符串中的“\ h”部分。它说,“无法识别的逃脱序列”。这可能是你的问题吗?

哦,如果我在长字符串之前加上“@”,则contains()方法返回true。

HTH,

-Dan

答案 1 :(得分:2)

假设您已经检查过字母“O”与数字“0”以及类似的东西,我建议您在字符串变量devPathName中看到的字符串正在编码以供显示和并不是你认为的那样。

例如,如果字符串包含字符\x000dControl-M),则在检查字符串的值时,Visual Studio调试器将显示为\r

或者,另一个例子,如果字符串包含序列3504(三 - 五 - 四 - 四)但您搜索35O4(三 - 五 - 四 - 四),那么你将找不到一场比赛。

(根据您的字体,您可能无法看到某些字符之间的差异。将“0O1lB8S5”与“0O1lB8S5”用不同的字体进行比较,看看我的意思。)

答案 2 :(得分:0)

这对我来说也是如此。


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没有被更改,并且该值是您所期望的。

答案 3 :(得分:0)

在statusLabel.text中评估为false,测试变量或部分显示的内容是什么?你确定显示器不是这样的:

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

也许你只是在看那个字符串的第一行?

答案 4 :(得分:0)

你需要在通过.Contains()

解析它之前转义长字符串

在字符串的开头添加一个符号(@),如前几个答案所示,它应该完美评估。

当踩到.Contains时,初始字符串,在你的情况下

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

包含非转义字符和原因.Contains在完成比较之前终止。