为什么Contains(value)在包含值时等于false?

时间:2016-06-30 04:07:40

标签: c#

这是数据,Char-Array(电路板)和Char-Arrays列表,它们由电路板组成不同的三个字符序列。

public static char[] board = { 'Q', '-', '+',
                               'A', '-', 'D',
                               '+', 'X', 'C' };

static List<char[]> dalist = new List<char[]> { 
        new char[3] { board[3], board[4], board[5] },
        new char[3] { board[0], board[4], board[8] },
        new char[3] { board[2], board[4], board[6] },
        new char[3] { board[1], board[4], board[7] },

        new char[3] { board[0], board[1], board[2] },
        new char[3] { board[6], board[7], board[8] },
        new char[3] { board[0], board[3], board[6] },
        new char[3] { board[2], board[5], board[8] }
};

static void Main(){   

    foreach (var item in dalist[2])
    {
        Console.WriteLine(item);
    }
    // This returns + - + as expected


    Console.WriteLine(dalist[2].ToString().Contains("-"));
    // This returns false

}

为什么.Contains方法意外返回false?

7 个答案:

答案 0 :(得分:3)

daList[2]char[]。当您在数组上调用ToString()时,它不会将数组的所有元素连接成一个字符串,而是返回类名,在本例中为System.Char[]。如果你Console.WriteLine(daList[2].ToString()),你可以自己看到这个。由于文字字符串"System.Char[]"不包含连字符,daList[2].ToString().Contains("-")返回false。

如果要从字符数组中创建字符串,可以使用字符串构造函数。我认为这是你真正想要的:

Console.WriteLine(new String(dalist[2]).Contains("-"));

小提琴:https://dotnetfiddle.net/jLpJLV

答案 1 :(得分:1)

您可以使用contains

-方法检查datalist2 Contains字符array
Console.WriteLine(dalist[2].Contains('-'));

答案 2 :(得分:0)

您的dataList不是一个字符数组,而是一个数组列表。那么你所追求的是第三个列表中的第二个元素,或者[2] [1]中的元素。所以你需要这个:

Console.WriteLine(datalist[2][1].ToString().Contains("-"));

可以进一步简化为

Console.WriteLine(datalist[2][1] == '-');

另一种方法是检查列表是否包含字符:

Console.WriteLine(datalist[2].Contains('-'));

为什么你的方法不起作用的共鸣是,当在一个字符数组上调用ToString时,它不会简单地组合你的角色,但创建类似于System.Char[]的东西,这显然不是你的预期。 ToString - 方法不够智能,无法首先检查其中的元素并使用字符串表示。但是它只返回包含元素的类型。

答案 3 :(得分:0)

dalist[2]不是单个值,当您在char数组上调用char时,它是ToString()数组,您将获得&#34; System.Char[]&#34;不是&#34; + - +&#34;正如你在想的那样..

Console.WriteLine(dalist[2][1].ToString().Contains("-"));
// This will returns true

如果您要检查数组中是否存在项目,请删除ToString()并查找该字符。

Console.WriteLine(dalist[2].Contains('-'));

答案 4 :(得分:0)

这个检查是否&#34; System.Char []&#34;包含&#34; - &#34;结果为FALSE

Console.WriteLine(dalist[2].ToString().Contains('-'));

这个检查是否[&#34; +&#34;] [&#34; - &#34;] [&#34; +&#34;]包含&#34; - &#34;结果为TRUE

Console.WriteLine(dalist[2].Contains('-'));

答案 5 :(得分:0)

DataSource

string dalist2 = dalist[2][0].ToString() + dalist[2][1].ToString() + dalist[2][2].ToString();

Console.WriteLine(dalist2.Contains("-"));

答案 6 :(得分:0)

将代码从.ToString()修改为.ToList() 即更改代码如下

bool isContains = dalist[2].ToList().Contains('-');