Cloud-Link's blog Cloud-Link's blog
首页
  • 开发资源
  • 人员动态
  • 新人训练
  • 奖惩通报
  • 通讯录
项目资产
  • 快速指南
  • 后端框架
  • 前端框架
  • 业务模块
  • 基础理论
    • 前端
    • 后端
    • 数据库
    • 工具类
  • 常用
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
关于
首页
  • 开发资源
  • 人员动态
  • 新人训练
  • 奖惩通报
  • 通讯录
项目资产
  • 快速指南
  • 后端框架
  • 前端框架
  • 业务模块
  • 基础理论
    • 前端
    • 后端
    • 数据库
    • 工具类
  • 常用
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
关于
  • 指南(guide)

  • 后端框架(framework)

    • 主机(Host)
    • 通用库(Utils)
      • 说明
      • 数据转换扩展
      • Guid 扩展
      • 枚举扩展
      • 字符串扩展
      • 加解密
      • 返回结果
      • 数据检测
    • 数据访问(Data)
    • 日志管理(Logging)
    • 对象映射(Mapper)
    • 接口文档(Swagger)
    • 内存缓存(Cache)
    • 模型验证(Validation)
    • 身份认证(Auth)
    • 模块抽象(Module)
    • 消息队列(MQ)
    • 任务调度(Quartz)
    • Excel操作(Excel)
    • 配置管理(Config)
    • PDF操作(Pdf)
    • 对象存储(OSS)
  • 前端框架(frendEnd)

  • 业务模块(modules)

  • 基础理论(fundamentals)

  • 开发框架
  • 后端框架(framework)
2021-09-15

通用库(Utils)

# 通用库说明

# 说明

通用库是整个框架的基础库,它包含了常用的封装类和扩展类,目前包括两部分Utils.Core和Utils.Mvc,从名字就可以看出来,一个是核心库,一个是针对 Mvc 的库。

因为里面东西较多,而且比较杂,所以仅仅挑选一些用的最多的来介绍,其它的可自行查看源码。

# 数据转换扩展

C#中,当需要数据转换的时候,可以有多种方式,比如:

//第一种
var str = "123";
var num = Convert.ToInt32(str);

//第二种,如果str包含非数字类型,不会异常
var str = "123";
if (int.TryParse(str, out int num))
{

}
1
2
3
4
5
6
7
8
9
10

以上两种方式都可以转换,区别在于第一种如果 str 包含了非数字类型,会抛出异常,,所以一般为了确保转换成功,会采用第二种方式。但是,如果每次数据转换都这样写也挺麻烦的,好在 C#有扩展方法的存在。

/// <summary>
/// 转换成Int/Int32
/// </summary>
/// <param name="s"></param>
/// <param name="round">是否四舍五入,默认false</param>
/// <returns></returns>
public static int ToInt(this object s, bool round = false)
{
    if (s == null || s == DBNull.Value)
        return 0;

    if (s.GetType().IsEnum)
    {
        return (int)s;
    }

    if (s is bool b)
        return b ? 1 : 0;

    if (int.TryParse(s.ToString(), out int result))
        return result;

    var f = s.ToFloat();
    return round ? Convert.ToInt32(f) : (int)f;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

这样,当你需要将字符串转换为整数时,只需这样:

var str = "123";
var num = str.ToInt();
1
2

其它数据类型转换方法都是类似的,比如字符串转日期,则是str.ToDatetime()。

# Guid 扩展

var id = Guid.NewGuid();

//判断Guid是否为空
var isEmpty = id.IsEmpty();

//判断Guid是否不为空
var notEmpty = id.NotEmpty();

1
2
3
4
5
6
7
8

# 枚举扩展

经常遇到需要显示枚举值对应的中文名称,可以使用以下扩展方法:

public enum Sex{
    [Description("男")]
    Boy,
    [Description("女")]
    Girl
}

var name = Sex.Boy.ToDescription();
//name:男
1
2
3
4
5
6
7
8
9

ToDescription方法用的最多的地方就是在实体的扩展类里面,实体的属性是枚举类型的,当查询某个实体列表的时候,往往希望返回的是枚举值对应的中文名称,比如User实体,里面有Sex属性,一般会在User.Extend.cs类里面添加一个SexName的属性

public string SexName => Sex.ToDescription();
1

这样,迁回就能通过sexName来获取性别名称了~

# 字符串扩展

var str = "123";

//判断字符串是否为Null、空
var b = str.IsNull();

//判断字符串是否不为Null、空
var b = str.NotNull();

// 与字符串进行比较,忽略大小写
var b = str.EqualsIgnoreCase("123");
1
2
3
4
5
6
7
8
9
10

# 加解密

DES 加解密

MD5 加密

# 返回结果

方法或接口经常需要返回包含多个状态的接口,所以通用库提供了IResultModel接口和ResultModel实现类。

在 ResultModel 中,Code 为 1 表示成功,为 0 表示失败,系统中已提供了一些非常方便的方法

//成功
ResultModel.Success("这里可以传任何类型的数据");

//失败
ResultModel.Failed();

//根据bool返回success/failed
ResultModel.Result(bool success);

//数据已存在
ResultModel.HasExists;

//数据不存在
ResultModel.NotExists;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

示例:

public IResultModel Create(int id)
{
    if(id>0)
        return ResultModel.Success("创建成功");
    else
        return ResultModel.Failed("创建失败");
}

//如果上面的方法是一个action,那么前端接收的数据应该是
{
    code:1,
    msg:'创建成功'
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 数据检测

数据检测用于需要判断数据是否符合条件,不符合会抛出异常的情况。

所有检测方法都在Check.c里面

publick void Create(string name)
{
    //如果名称为空,会抛出异常
    Check.NotNull(name,nameof(name), "名称不能为空~");
}
1
2
3
4
5
主机(Host)
数据访问(Data)

← 主机(Host) 数据访问(Data)→

Copyright © 2021-2022 用技术改变世界 | Tungray Cloud-Link
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×