免责声明这个问题是关于,If和如何使用
Parse方法异常,找出哪个参数/变量实际上没有转换.它是不是,争论这是否是最好的或者没有正确的方法找到替代品,如TryParse或后续If声明.但是,我们赞赏每一个替代方案或解决方法.
我在C#中有以下代码块
string a = "1"
string b = "b"
string c = "3"
// add many more similar
try
{
int a1 = int.Parse(a);
int b1 = int.Parse(b);
int c1 = int.Parse(c);
}
catch (Exception e)
{
// Here I will do some logging
}
Run Code Online (Sandbox Code Playgroud)
这int b1 = int.Parse(b);行将失败,catch块将捕获异常.
是否可以通过检查,以编程方式Exception查找string b导致错误的实际值(值的值,而不是变量的名称).例如,我希望得到类似的东西:
无法解析"b"
小智 6
改为使用TryParse(你不需要整个try catch),例如:
int a1=0;
if(!int.TryParse(a, out a1))
{
//do something here
}
int b1=0;
if(!int.TryParse(b, out b1))
{
//do something here
}
int c1=0;
if(!int.TryParse(c, out c1))
{
//do something here
}
Run Code Online (Sandbox Code Playgroud)
不可靠 - FormatException这对你没有任何帮助.解析消息非常脆弱 - 它可以在不同版本的.NET中更改,并且它将被本地化.
一种选择是编写自己的Parse方法,该方法可与之互操作int.Parse,但抛出的子类FormatException.例如:
public class ParseException : FormatException
{
public string OriginalValue { get; }
public ParseException(string message, string originalValue)
: base(message)
{
OriginalValue = originalValue;
}
}
public class ExtendedParsing
{
public int ParseInt32(string value)
{
int result;
if (int.TryParse(value, out result))
{
return result;
}
throw new ParseException($"Unable to parse \"{value}\"", value);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以用它作为:
try
{
int a1 = ExtendedParsing.ParseInt32(a);
int b1 = ExtendedParsing.ParseInt32(b);
int c1 = ExtendedParsing.ParseInt32(c);
}
catch (ParseException e)
{
Console.WriteLine($"Value that I failed to parse: {e.OriginalValue}");
}
Run Code Online (Sandbox Code Playgroud)