我需要确定是否可以将字符串解析为int数组.字符串可以是格式
"124,456,789,0"
如果它可以转换成如此:
int[] Ids = SearchTerm.Split(',').Select(int.Parse).ToArray();
Run Code Online (Sandbox Code Playgroud)
但是字符串也可能是这样的:
"这是一个字符串,非常好."
在这种情况下,解析失败.
根据字符串是否包含逗号字符(假设只有类似数组的字符串将包含此字符),逻辑当前分为两个方向,但此逻辑现在存在缺陷,并且逗号字符现在出现在其他字符串中.
我可以在它周围放一个Try..Catch,但我通常不利于控制异常的逻辑流程.
是否有捷径可寻?
Eri*_*ert 14
我可以在它周围放一个Try..Catch,但我通常不利于控制异常的逻辑流程
好的态度.如果可以避免异常,请执行此操作.
提出了许多答案
int myint;
bool parseFailed = SearchTerm.Split(',')
.Any( s => !int.TryParse(s, out myint));
Run Code Online (Sandbox Code Playgroud)
这不错,但也不是很好.我倾向于先写一个更好的辅助方法:
static class Extensions
{
public static int? TryParseAsInteger(this string s)
{
int j;
bool success = int.TryParse(s, out j);
if (success)
return j;
else
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以说:
bool parseFailed = SearchTerm.Split(',')
.Any( s => s.TryParseAsInteger() == null);
Run Code Online (Sandbox Code Playgroud)
但我认为你真正想要的是解析后的状态,如果它能够成功,而不仅仅是回答"解析会成功吗?"的问题.使用这种辅助方法,您可以说:
List<int?> parse = SearchTerm.Split(',')
.Select( s => s.TryParseAsInteger() )
.ToList();
Run Code Online (Sandbox Code Playgroud)
现在,如果列表包含任何空值,您就知道它很糟糕; 如果它不包含任何空值,那么你有你想要的结果:
int[] results = parse.Contains(null) ? null : parse.Select(x=>x.Value).ToArray();
Run Code Online (Sandbox Code Playgroud)
int myint;
bool parseFailed = SearchTerm.Split(',')
.Any( s => !int.TryParse(s, out myint));
Run Code Online (Sandbox Code Playgroud)