在Silverlight应用程序中,由于没有Count
重载,我需要将预期结果作为四个字符串元素。
NewReport
20140423_17255375
BSIQ
2wd28830-841c-4d30-95fd-a57a7aege412.zip
这行代码在我的silverlight应用程序中出现构建错误
var strFileTokens = filename.Split(new[] { '-' }, 4, StringSplitOptions.None);
构建错误: 错误4
The best overloaded method match for 'string.Split(string[], int, System.StringSplitOptions)' has some invalid arguments C:\TestSolution\Reporting.cs 287
如何获得上述四个字符串元素?
答案 0 :(得分:1)
正如您所提到的,在silverlight中不支持在返回的子字符串中获取最大计数的重载。 Here是银光概述。
因此,如果您只想使用4,则需要使用变通方法。您可以使用Split
+ Enumerable.Take
:
string[] strFileTokens = filename
.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries )
.Take(4)
.ToArray();
我会使用StringSplitOptions.RemoveEmptyEntries
来省略空标记。如果你不需要它作为数组,你可以省略ToArray
并懒惰地执行它,这可能更有效。
更新:现在我已经从您的其他问题中认识到您想要采用前三个元素和最后一个元素。所以如果这是你的文件名:
string filename = "NewReport-20140423_17255375-BSIQ-2wd28830-841c-4d30-95fd-a57a7aege412.zip";
您想要string[]:
"NewReport"
"20140423_17255375"
"BSIQ"
"2wd28830-841c-4d30-95fd-a57a7aege412.zip"
你可以使用LINQ的Skip
和Take
+ string.Join
来获取最后一个令牌的一个字符串:
string[] allTokens = filename.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
var firstThreeToken = allTokens.Take(3);
var lastTokens = allTokens.Skip(3);
string lastToken = string.Join("-", lastTokens);
string[] allToken = firstThreeToken.Concat(new[] { lastToken }).ToArray();
答案 1 :(得分:0)
您可以使用提供带计数参数的重载的Regex.Split
方法。
Regex reg = new Regex( "-" );
string filename = "NewReport-20140423_17255375-BSIQ-2wd28830-841c-4d30-95fd-a57a7aege412.zip";
var parts = reg.Split( filename, 4 );