通用库(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
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
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
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
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
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
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
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
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
2
3
4
5