c#编程细节(一)

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是可以提升性能的但是会消耗内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值