
FormatException
当我们在C#中进行数据类型转换,尤其是涉及到字符串解析时,
FormatException
int
double
decimal
float
int
double
DateTime
"2023-13-01"
"January 1st, 2023"
bool.Parse()
FormatException
Guid
Guid.Parse()
"{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Enum
Enum.Parse()
Enum.TryParse()
string.Format
string.Format
FormatException
在我看来,预防
FormatException
TryParse
例如,当你需要将一个字符串转换为整数时,不要直接使用
int.Parse()
int.TryParse()
string input = "123";
int result;
if (int.TryParse(input, out result))
{
Console.WriteLine($"转换成功:{result}");
}
else
{
Console.WriteLine($"'{input}' 不是一个有效的整数格式。");
// 这里可以处理错误,比如给用户提示,或者使用默认值
}
// 另一个例子,处理无效输入
string invalidInput = "abc";
if (int.TryParse(invalidInput, out result))
{
Console.WriteLine($"转换成功:{result}");
}
else
{
Console.WriteLine($"'{invalidInput}' 不是一个有效的整数格式。");
}TryParse
true
out
false
对于日期时间,同样有
DateTime.TryParse()
DateTime.TryParseExact()
string dateString = "2023/08/15";
DateTime parsedDate;
if (DateTime.TryParse(dateString, out parsedDate))
{
Console.WriteLine($"日期转换成功:{parsedDate.ToShortDateString()}");
}
else
{
Console.WriteLine($"'{dateString}' 不是一个有效的日期格式。");
}
// 如果你知道确切的日期格式,使用 TryParseExact 更严谨
string exactDateString = "15-08-2023";
string format = "dd-MM-yyyy";
if (DateTime.TryParseExact(exactDateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
{
Console.WriteLine($"精确日期转换成功:{parsedDate.ToShortDateString()}");
}
else
{
Console.WriteLine($"'{exactDateString}' 不符合 '{format}' 格式。");
}除了
TryParse
null
CultureInfo
CultureInfo
FormatException
double.Parse("1.23", CultureInfo.InvariantCulture)数字字符串转换是
FormatException
Parse
int.Parse
null
int.Parse(null)
int.Parse("")ArgumentNullException
FormatException
null
ArgumentNullException
Parse
.
,
1,234.56
,
.
1.234,56
"1,234.56"
.
FormatException
// 假设当前文化是en-US
double d1 = double.Parse("1,234.56"); // 成功,结果1234.56
// 假设当前文化是fr-FR (法国,逗号是小数分隔符)
// double d2 = double.Parse("1,234.56"); // 抛出FormatException,因为句点是无效字符
// 正确的做法是指定文化
double d3 = double.Parse("1.234,56", new CultureInfo("fr-FR")); // 成功,结果1234.56int
2,147,483,647
OverflowException
FormatException
Parse
FormatException
int.Parse("12 3")理解这些原因,就能更好地指导我们使用
TryParse
CultureInfo
确实,
FormatException
string.Format
string.Format
FormatException
// 尝试将一个字符串用数字格式化
try
{
string formattedString = string.Format("{0:N2}", "hello"); // 'N2' 是数字格式
Console.WriteLine(formattedString);
}
catch (FormatException ex)
{
Console.WriteLine($"string.Format 错误:{ex.Message}");
// 输出:string.Format 错误:输入字符串的格式不正确。
}
// 错误的日期格式说明符
try
{
DateTime now = DateTime.Now;
string formattedDate = string.Format("{0:XYZ}", now); // 'XYZ' 是无效的日期格式
Console.WriteLine(formattedDate);
}
catch (FormatException ex)
{
Console.WriteLine($"string.Format 错误:{ex.Message}");
// 输出:string.Format 错误:输入字符串的格式不正确。
}这类错误往往发生在动态构建格式字符串或者复制粘贴时没有仔细检查。
Guid.Parse()
Guid
FormatException
Guid
try
{
Guid g1 = Guid.Parse("12345678-1234-1234-1234-1234567890AB"); // 正确
Console.WriteLine($"Guid 转换成功:{g1}");
Guid g2 = Guid.Parse("invalid-guid-string"); // 错误格式
Console.WriteLine(g2);
}
catch (FormatException ex)
{
Console.WriteLine($"Guid 转换错误:{ex.Message}");
// 输出:Guid 转换错误:输入字符串的格式不正确。
}和数字、日期一样,
Guid
TryParse
Enum.Parse()
ignoreCase
FormatException
public enum Status { Pending, Approved, Rejected }
try
{
Status s1 = (Status)Enum.Parse(typeof(Status), "Approved"); // 正确
Console.WriteLine($"枚举转换成功:{s1}");
Status s2 = (Status)Enum.Parse(typeof(Status), "approved", true); // 忽略大小写
Console.WriteLine($"枚举转换成功(忽略大小写):{s2}");
Status s3 = (Status)Enum.Parse(typeof(Status), "InvalidStatus"); // 错误
Console.WriteLine(s3);
}
catch (FormatException ex)
{
Console.WriteLine($"枚举转换错误:{ex.Message}");
// 输出:枚举转换错误:请求的名称或值在枚举中找不到。
}同样,
Enum.TryParse()
在遇到
FormatException
以上就是FormatException在C#中什么情况下抛出?如何预防?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号