验证数据输入的合法性(一)
我们软件开发过程中,很多时候都需要用户进行数据录入。
录入以后,我们需要对数据的合法性进行判断,每一个需要判断的字段都需要一个判断条件,冗余代码较多。一直觉得这块比较繁琐,特别是需要输入和验证的字段比较多的时候。
之前尝试用过FluentValidation和Validation,貌似都跟期望的有点差距。
一直想对这块进行优化。今天进行了一些简单的尝试。
代码:
using System;
using System.Text;
namespace CgdataBase;
public static class InputHelper
{
public static bool InputValueIsValid<T>(string text, string keyName, Func<T, bool> func, StringBuilder builder)
{
try
{
if (text.IsNullOrEmpty())
{
builder?.AppendLine($"请输入 {keyName}");
return false;
}
var value = (T)Convert.ChangeType(text, typeof(T));
if (func != null)
{
var result = func.Invoke(value);
if (result == false)
{
builder?.AppendLine($"请输入正确的 {keyName}");
}
return result;
}
return true;
}
catch (Exception)
{
builder?.AppendLine($"请输入正确的 {keyName}");
}
return false;
}
}
使用示例:
private void OnSubmit()
{
bool result = true;
StringBuilder sb = new StringBuilder();
result &= InputHelper.InputValueIsValid<string>(TemplateName, "模板名称", s => s.IsContainValidText(), sb);
result &= InputHelper.InputValueIsValid<string>(FileName, "文件名", s => s.IsContainValidText(), sb);
result &= InputHelper.InputValueIsValid<int>(KeyCount, "个数", s => s >= 0, sb);
if (result == false)
{
MessageBox.Show(sb.ToString());
return;
}
if (Result == null)
Result = new TemplateInfo();
ObjectHelper.DeepCopy(this, Result, false);
Result.TemplateContent = GetTemplateContent();
App.GetActiveWindow().DialogResult = true;
}
这样的话,在界面的ViewModel部分,所有字段对应的数据类型都可以定成string,提交时根据目标类型进行转换和判断。
我这里面使用的ObjectHelper.DeepCopy(this, Result, false)方法也里面封装了,直接由string类型转换成目标类型的转换操作。
后续又做了一些升级:
验证数据输入的合法性(二) - wzwyc - 博客园
https://www.cnblogs.com/wzwyc/p/17911344.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧