我想确保我的课程很健壮 - 即使它们很简单,对于有经验的程序员来说也是愚蠢的。
假设我有一个如下所示的方法接受字符串[]并将其作为int []返回。
public static int[] GetIntArrayFromStringArray(string[] stringArray)
{
int i = 0;
int[] ints = new int[stringArray.Length];
foreach (var str in stringArray)
{
ints[i++] = (str != "" ? int.Parse(str) : 0);
}
return ints;
}
使用try-catch并抛出异常是最好的选择吗?当我尝试使用try-catch时,似乎我的变量不在范围内但我需要它们在try-catch中以捕获stringArray为null的任何错误!
也许我应该用它?
if (stringArray == null) //do something ...
但不确定在发生错误时该怎么办...我是否返回null int []或抛出异常?
(我还必须检查int.Parse(str)是否没有失败 - 我已经到了那个但希望它可以在try-catch块中!) < / p>
正如我所说,在我养成太多坏习惯之前,这些是我想要尝试并且正确的任务。感谢。
答案 0 :(得分:1)
您可以使用int.TryParse()代替。
答案 1 :(得分:1)
尝试更简单的转化:
return stringArray.Select(s =&gt; IntParseOrDefault(s,0))。ToArray();
IntParseOrDefault 就像这样:
int IntParseOrDefault(string s, int defaultVal)
{
int i;
if (!int.TryParse(s, out i)) i = defaultVal;
return i;
}
如果您希望方法失败,如果任何字符串不是有效整数,那么在时抛出 InvalidArgumentException 而不是使用默认值TryParse 失败。
答案 2 :(得分:0)
这是一个例子
foreach (string str in stringArray)
{
int nr = 0;
int.TryParse(str, out nr);
if (nr > 0)
ints[i++] = nr;
}
这是完整的代码
public static int[] GetIntArrayFromStringArray(string[] stringArray)
{
if (stringArray == null || stringArray.Length == 0)
throw new ArgumentNullException("string array is null or empty");
int i = 0;
int[] ints = new int[stringArray.Length];
foreach (var str in stringArray)
{
int nr = 0;
int.TryParse(str, out nr);
if (nr > 0)
ints[i] = nr;
i++;
}
return ints;
}
答案 3 :(得分:0)
以下是如何使用try-catch:
public static int[] GetIntArrayFromStringArray(string[] stringArray)
{
int i = 0;
int[] ints = null;
try {
ints = new int[stringArray.Length];
foreach (var str in stringArray)
{
ints[i++] = (str != "" ? int.Parse(str) : 0);
}
}
catch {
// Throw custom exception
}
return ints;
}
答案 4 :(得分:0)
我会在catch块中抛出一个自定义异常。因此,您的类的用户可以捕获此异常。
答案 5 :(得分:0)
public static int[] GetIntArrayFromStringArray(string[] stringArray)
{
int i = 0;
int[] ints;
int num;
if (stringArray == null && stringArray.Length > 0)
{
ints = new int[stringArray.Length]
foreach (var str in stringArray)
{
if (string.IsNullOrEmpty(str) && int.TryParse(str, num))
{
ints[i++] = num;
}
}
}
return ints;
}
答案 6 :(得分:0)
public static int[] GetIntArrayFromStringArray(string[] stringArray)
{
if (stringArray == null)
{
throw new ArgumentNullException("stringArray");
}
int count = stringArray.Length;
int[] ints = new int[count];
for (int i = 0; i < count; i++)
{
int intValue;
ints[i] = int.TryParse(stringArray[i], out intValue) ? intValue : 0;
}
return ints;
}
答案 7 :(得分:0)
.NET Framework中的许多方法在无效输入上抛出异常都有非抛出的对应方,通常以Try
为前缀,而是返回一个布尔值。例如,在int.Parse
的情况下,您可以更轻松地调用int.TryParse
,例如:
public static int[] GetIntArrayFromStringArray(string[] stringArray)
{
int i = 0;
int[] ints = new int[stringArray.Length];
foreach (var str in stringArray)
{
int a = 0
int.TryParse(str, out a)
ints[i++] = a;
}
return ints;
}