验证数据输入的合法性(一)

我们软件开发过程中,很多时候都需要用户进行数据录入。
录入以后,我们需要对数据的合法性进行判断,每一个需要判断的字段都需要一个判断条件,冗余代码较多。一直觉得这块比较繁琐,特别是需要输入和验证的字段比较多的时候。
之前尝试用过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

posted @   wzwyc  阅读(105)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示