对算法输入参数非法情况进行过滤
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
using Emgu.CV;
|
||||
using Emgu.CV.Structure;
|
||||
using Emgu.CV.Util;
|
||||
using System.Globalization;
|
||||
|
||||
namespace XP.ImageProcessing.Core;
|
||||
|
||||
@@ -164,11 +165,45 @@ public abstract class ImageProcessorBase
|
||||
/// </summary>
|
||||
public T GetParameter<T>(string name)
|
||||
{
|
||||
if (Parameters.ContainsKey(name))
|
||||
if (!Parameters.ContainsKey(name))
|
||||
throw new ArgumentException($"参数 {name} 不存在");
|
||||
|
||||
var parameter = Parameters[name];
|
||||
|
||||
try
|
||||
{
|
||||
return (T)Convert.ChangeType(Parameters[name].Value, typeof(T))!;
|
||||
if (parameter.Value is T typedValue)
|
||||
return typedValue;
|
||||
|
||||
if (parameter.Value is string textValue)
|
||||
{
|
||||
var normalizedText = NormalizeText(textValue);
|
||||
if (typeof(T) == typeof(string))
|
||||
return (T)(object)textValue;
|
||||
|
||||
if (typeof(T) == typeof(int) && int.TryParse(normalizedText, NumberStyles.Integer, CultureInfo.InvariantCulture, out var intValue))
|
||||
return (T)(object)intValue;
|
||||
|
||||
if (typeof(T) == typeof(double) && double.TryParse(normalizedText, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out var doubleValue))
|
||||
return (T)(object)doubleValue;
|
||||
|
||||
if (typeof(T) == typeof(bool) && bool.TryParse(normalizedText, out var boolValue))
|
||||
return (T)(object)boolValue;
|
||||
}
|
||||
|
||||
return (T)Convert.ChangeType(parameter.Value, typeof(T), CultureInfo.InvariantCulture)!;
|
||||
}
|
||||
throw new ArgumentException($"参数 {name} 不存在");
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new ArgumentException(
|
||||
$"参数 {name} 的值 '{parameter.Value}' 无法转换为 {typeof(T).Name}",
|
||||
ex);
|
||||
}
|
||||
}
|
||||
|
||||
private static string NormalizeText(string value)
|
||||
{
|
||||
return value.Trim().TrimEnd('、', ',', ',', '。', '.', ';', ';', ':', ':');
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -178,4 +213,4 @@ public abstract class ImageProcessorBase
|
||||
{
|
||||
return Parameters.ContainsKey(name) ? Parameters[name] : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user