我有一个对象列表,这些对象有一个名为
Date
的属性,它实际上是一个string
(不是我的错,我不能改变它)。
ObjectsList[0].Date
返回 "08/07/2014 07:55:00"
,但我不知道为什么,如果我这样做 .Contains("07/2014")
它返回 true
和 .Contains("8/07/2014")
返回 false
.
这是一个escaping问题吗?有没有办法在string.Contains
上
转义特殊字符?
如果
Contains
没有返回true
,则字符串中没有这样的子串。要找出破坏乐趣的invisible符号,让我们看看dump:
using System.Linq;
...
string dump = string.Join(Environment.NewLine, ObjectsList[0].Date
.Select(c => $"'{c}' (\\u{((int)c):x4})"));
Console.Write(dump);
预期产出:
'0' (\u0030)
'8' (\u0038)
'/' (\u002f)
'0' (\u0030)
'7' (\u0037)
'/' (\u002f)
'2' (\u0032)
'0' (\u0030)
'1' (\u0031)
'4' (\u0034)
' ' (\u0020)
'0' (\u0030)
'7' (\u0037)
':' (\u003a)
'5' (\u0035)
'5' (\u0035)
':' (\u003a)
'0' (\u0030)
'0' (\u0030)
但是您将拥有一个不同的。要摆脱 不需要的 字符,您可以使用 Linq:
using System.Linq;
...
// Keep only digits '0'..'9', space ' ' and delimiters ':', '/'
string cleared = string.Concat(ObjectsList[0]
.Date
.Where(c => char.IsDigit(c) || " :/".Contains(c)));
如果您想比较时间,请使用此代码
foreach (var item in ObjectsList)
{
if (string.Equals(item.Date, DateTime.Now.ToString("dd/mm/yyyy")))
{
Console.WriteLine("true");
}
else
{
Console.WriteLine("false");
}
}