Silverlight应用程序中的String Split方法没有Count重载

时间:2014-04-28 07:03:34

标签: .net silverlight silverlight-5.0 string-split

Splitting a filename

上的问题参考

在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

如何获得上述四个字符串元素?

2 个答案:

答案 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的SkipTake + 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方法。

enter image description here

Regex reg = new Regex( "-" );
string filename = "NewReport-20140423_17255375-BSIQ-2wd28830-841c-4d30-95fd-a57a7aege412.zip";
var parts = reg.Split( filename, 4 );