1,public T Find(int id) where T : BaseModel ;
/// where约束是为了正确的调用,才能int id
其次也能从此看出继承的好处,一个BaseModel便可以涵盖所有model,代码更简洁
2,prop.SetValue(t, reader[prop.Name] is DBNull ? null : reader[prop.Name]);
DBNull指数据库中数据为空,是一个对象类型,没有转化直接set会报错,所以可以 ? : ;
3, Assembly assembly=Assembly.Load(“Ruanmou.DB.SqlServer”);//1 动态加载
Type dbHelperType = assembly.GetType(“Ruanmou.DB.SqlServer.SqlServerHelper”);//2 获取类型
反射机制依赖的是字符串,这样其实增加了很多灵活性,将所需几种dll文件名存储到配置文件,需要用哪一个就加载哪一个,好维护好修改
Assembly assembly = Assembly.Load(DllName);//1 加载dll
Type type = assembly.GetType(TypeName);//2 获取类型信息
object oDBHelper = Activator.CreateInstance(type);//3 创建对象
IDBHelper iDBHelper = (IDBHelper)oDBHelper;//4 类型转换
return iDBHelper;
4,[AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
声明特性类的特性,AttributeTargets特性可用范围,AllowMultiple使用时是否可以多行,一般默认不可以
因为使用一些集成框架,容易给人一种误解,特性能出效果一定是有地方主动调用的,像是放在mvc的控制器里就会自动调用,以及[Serializable],一般自定义的属性都是需要反射以及主动使用
1,过滤器
2,Normal = 0,//枚举项中,左边是字段名称 右边是数据库值 。或者实体类的一些属性,如果想在程序中放中文描述,不能用注释,或者想起个别名, 此时就可以用特性,(特性参数不能是动态的)
例
public enum UserState
{
/// <summary>
/// 正常
/// </summary>
[Remark("正常")]
Normal = 0,//左边是字段名称 右边是数据库值 哪里放描述? 注释
/// <summary>
/// 冻结
/// </summary>
[Remark("冻结")]
Frozen = 1,
/// <summary>
/// 删除
/// </summary>
//[Remark("删除")]
Deleted = 2
}
//枚举项加一个描述 实体类的属性也可以Display
//别名 映射
public class RemarkAttribute : Attribute
{
public RemarkAttribute(string remark)
{
this._Remark = remark;
}
private string _Remark = null;
public string GetRemark()
{
return this._Remark;
}
}
(补充扩展方法的使用:扩展方法的第一个参数指定该方法作用于那个类型,并且此参数用this为前缀修饰)
例:// 扩展方法---计算字符串长度 public static int WordCount(this string str) { return str.Length; }
调用:string ex = "yx123456"; int count = ex.WordCount(); Console.WriteLine(count);
#, decimal.TryParse(str1,out num1)
功能:将str1转化成decimal类型,若转化成功,将值赋给num1,并返回true;
若转化失败,返回false。
5,字符串前缀$
string y = $"{s} world";
等同于使用Format方法:
string y = string.Format("{0} world",s);
并且我们可以调用值的方法,如:
string y = $"{s.ToLower()} world";
6,tryc -catch的使用
底层代码不要用try-catch,除非这里面报错是能容忍的,而应该使用throw,trycatch然后继续运行隐藏错误会留下很多隐患,比如查询时出错catch住然后返回null,ui层你要如何处理,这样你无法找到出错原因甚至是出错的地方(使用日志可以避免这个问题)
static是可以提升性能的但是会消耗内存