我正在将 C++ 类移植到 C#,但遇到了困难。
我想找到一个相当于 SpanIncluding 的东西。
这是我的 cpp 代码:
while (Notes.Mid(j,1).SpanIncluding("0123456789").IsEmpty()!=NULL){}
任何人都可以帮助我吗?
我相信SpanIncluding
从字符串的开头开始匹配,当找到第一个不匹配的字符时停止。
因此,一般情况下的一种表述是:
string match = new string(someString.ToCharArray().
TakeWhile(c => "0123456789".Contains(c)).ToArray());
(或使用正则表达式的等价物)。
但是,在问题中给出的示例中,只有一个字符,因此整个事情可能归结为测试该字符是否为>= '0'
and <= '9'
:
while(char.IsDigit(Notes[j])) { ... };
我找到了SpanIncluding的 MSDN 页面,这似乎是一个可笑的特定功能。我无法真正理解它试图解决什么,因为它有一些奇怪的警告。
LINQ 将是实现它的一种方式:
string text = "2334562";
IEnumerable<char> spannedChars = text.TakeWhile(c => "1234567890".Contains(c));
如果我正确理解了 MSDN 页面,这是SpanIncluding
比queen3 选项更直接的端口,因为结果集应该在它遇到不在跨越字符串中的字符时停止。