C#学习纪要(9):7月20日

7月20日  星期一  雨,台风到了,又走了。

今天早上好大的雨,鞋子都湿了。心情还不错,继续保持哈,饱满的情绪。

 

今天要做点什么呢?

首先就是要把数据库修复好,不然就要给叼了。

其次是完成删除模块,上传下载模块,同步模块,备份模块还需要继续完善。事情还挺多的。

 10:34------------前一个小时做的是修复数据库的事情。还好要修复的表不多,我备份之后,然后手动地把多余的数据删掉了,但是有一个表的数据删除不成功。刚才险些陷入了困境,提示说无法找到某子项目的引用,调试了半个小时,最后发现原来是根本就不需要禁用那个子项目,而是引用自己。冷静啊。做的什么蠢事啊。

10:47-----------目前要完成的是业务备份向导,业务数据备份向导的一个需求是导出某段时间内的数据,所以在获得表对象的时候需要加入一个条件函数,就是利用Where()了。也就是说可以给backup类添加一个多态的backup方法,令他可以处理有条件的备份操作。

              -----------还有一点是,在执行对话框的列表控件中,理想的思路是使用它作为一个日志输入窗口,因此应该有一个日志输出方法来抽象这个过程,代码有重新设计的必要。

 13:31-------------业务备份向导的有条件的备份方法目前无法完成,因为每一个表示条件的r表达式都需要知道确切的TSource类的类型,不然的话无法获取r的属性。所以现在只好猥琐的一个表一个表的写了。还好这里只有4个表。

13:55-------------又出现了一个问题:

      虽然现在能把r表达式写出来(因为使用了具体的类),但是除了Bill表跟时间直接相关,可以用billDate属性来写r表达式外,其它三个表都无法写,因为第二,三个表是跟Bill表相关联的,而第四个表又是跟第三个表相关联。这导致无法直接在where方法中传入一个委托来解决问题。

      所以 现在又两个 选择: 一是缩小backup的方法粒度,现在的粒度大小是数据表,如果缩到数据项粒度,就有重用的机会了。

二是写一个委托来完成。

15:14-------------关于委托的理解:刚才10分钟内在思考一个问题,r表达式的参数是怎么使用的,也就是说为什么一个可迭代的容器,比如说Table<T>,就可以自动对容器中的所有值进行判断呢?  答案很简单,就是在容器方法的实现中来调用这个委托方法了,虽然传入参数的时候只有一个名字,但是是可以传入参数的,比如说这段代码:

public class GenericDelegateDemo
{
    List
<String> listString = new List<String>()
    {
        
"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"
    };


    
public String GetStringList(Predicate<String> p)
    {
        
foreach(string item in listString)
        {
       
     if (p(item))
                
return item; 
        }
        
return null;
    }


    
public bool ExistString()
    {
        
string str = GetStringList((c) => { return c.Length <= 3 && c.Contains('S'); });
        
if (str == null)
            
return false;
        
else
            
return true;

    }
}

15:31-------------决定用缩小粒度的方法

17:00-------------完成,并且开始测试

17:28------------ 测试成功。发现了一个小问题,在使用泛型的时候,可以广泛地使用var,而代替太多的强制类型转换,因为强制类型转换往往会导致编译不通过,或者运行时抛错。究竟哪一种编程思路才是正确的呢?思考中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值