81 lines
2.3 KiB
C#
81 lines
2.3 KiB
C#
using System;
|
|
|
|
namespace MyParking.Shared
|
|
{
|
|
/// <summary>
|
|
/// 统一检查跨层数值和二维位姿是否由满足基本范围要求的有限值组成。
|
|
/// </summary>
|
|
public static class NumericGuard
|
|
{
|
|
/// <summary>
|
|
/// 确保指定浮点数不是NaN或无穷大。
|
|
/// </summary>
|
|
public static void EnsureFinite(
|
|
double value,
|
|
string parameterName)
|
|
{
|
|
if (double.IsNaN(value) ||
|
|
double.IsInfinity(value))
|
|
{
|
|
throw new ArgumentOutOfRangeException(
|
|
parameterName,
|
|
"参数必须是有限值。");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 确保指定浮点数是非负有限值。
|
|
/// </summary>
|
|
public static void EnsureFiniteNonNegative(
|
|
double value,
|
|
string parameterName)
|
|
{
|
|
EnsureFinite(value, parameterName);
|
|
|
|
if (value < 0.0)
|
|
{
|
|
throw new ArgumentOutOfRangeException(
|
|
parameterName,
|
|
"参数必须是非负有限值。");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 确保指定浮点数是正有限值。
|
|
/// </summary>
|
|
public static void EnsureFinitePositive(
|
|
double value,
|
|
string parameterName)
|
|
{
|
|
EnsureFinite(value, parameterName);
|
|
|
|
if (value <= 0.0)
|
|
{
|
|
throw new ArgumentOutOfRangeException(
|
|
parameterName,
|
|
"参数必须是正有限值。");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 确保二维位姿的位置和航向均为有限值。
|
|
/// </summary>
|
|
public static void EnsureFinite(
|
|
Pose2D pose,
|
|
string parameterName)
|
|
{
|
|
if (double.IsNaN(pose.XMeters) ||
|
|
double.IsInfinity(pose.XMeters) ||
|
|
double.IsNaN(pose.YMeters) ||
|
|
double.IsInfinity(pose.YMeters) ||
|
|
double.IsNaN(pose.YawRadians) ||
|
|
double.IsInfinity(pose.YawRadians))
|
|
{
|
|
throw new ArgumentOutOfRangeException(
|
|
parameterName,
|
|
"二维位姿必须由有限值组成。");
|
|
}
|
|
}
|
|
}
|
|
}
|