金沙国际官网_金沙国际平台登录

因为这个金沙国际官网_金沙国际平台登录网站与很多的大型澳门赌场都有合作,金沙国际官网_金沙国际平台登录尽职尽责,高效执行,保持好奇心,不断学习,追求卓越,点击进入金沙国际官网_金沙国际平台登录马上体验吧,所以现在也正式地开始了营业。

您的位置:金沙国际官网 > 编程 > DataSet集合直接根据传入的类转List金沙国际官网,

DataSet集合直接根据传入的类转List金沙国际官网,

发布时间:2019-11-05 03:23编辑:编程浏览(119)

    最近比较忙,好久没写博客了。个人感觉最好的进步就是写东西。哈哈。

    记得上高中时,给人当会计,帮忙结算月度工资;用的就是带语音功能的计算器! 当时用起来倍儿爽,于是速度加倍,效率加速;结果让老板赔了不少钱!

    一、深入.NET框架

    一般我们使用ADO.net从数据库中读取数据返回的集合是DataSet类型的。有时候我们需要进行转换成List<T>集合。一般的做法是在DAL层中,写个方法进行转换。(每个表写一个)。累哦!~

    就是因为这个,才对语音计算器有了深刻印象!可能是这货坑了我!哼~!

    1..NET框架具有两个组件:CLR(公共语言运行时)和FCL(框架类库),CLR是.NET框架的基础

    所以我就想,能不能写个工厂,传入DataSet 集合 和 需要转化的类的类型。就自动转化了。就有了下面的代码了。

    好吧,闲言少叙,直入正题吧!

    2.框架核心类库:

    金沙国际官网 1金沙国际官网 2

    最近在做一个项目,有个简单的功能,就是将文本转换成语音。

    System.Collections.Generic:泛型操作

     1         /// <summary>
     2         ///  Dataset 集合根据传入的 类型。自动转换List集合"
     3         /// </summary>
     4         /// <typeparam name="T">类(属性类 modle)</typeparam>
     5         /// <param name="ds">数据集合</param>
     6         /// <returns>List集合</returns>
     7         public List<T> GetListbyDataSet<T>(DataSet ds) where T: new()
     8         {
     9             List<T> li = new List<T>(); //声明要返回的集合
    10             var s = typeof(T);          // 获取传入类型
    11             var str = s.GetProperties(); // 获取传入类型的属性集合
    12             if (ds.Tables[0] == null || ds.Tables[0].Rows.Count < 0) //判断ds的null和是否包含数据
    13             {
    14                 return li;
    15             }
    16             for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //循环集合准备获取数据
    17             {
    18                 T t1 = new T();       // 声明类
    19                 foreach (var item in str)  // 循环类的属性
    20                 {
    21                     string itemstr = item.Name; //类属性名称
    22                     var itemtype = item.PropertyType; // 类属性的类型(int string datetime)
    23                     object value = GetvalbyDataSet(itemstr, itemtype, ds.Tables[0].Rows[i]); //获取值
    24                     item.SetValue(t1, value, null);
    25                     
    26                 }
    27                 li.Add(t1);
    28             }
    29              return li;
    30         }
    

    研究了这个功能后,抽空顺带做了个语音计算器!

    System.IO:IO流操作

    View Code

    “来银啊,上代码!”

    System.Net:网络编程

    金沙国际官网 3金沙国际官网 4

    “老大,木有银,上不了”

    System.Data:ADO.NET结构的类的访问

     1  /// <summary>
     2         ///  在DataRow中 获取 对应列的值
     3         /// </summary>
     4         /// <param name="colname">列名称</param>
     5         /// <param name="colname">列的类型</param>
     6         /// <param name="dr">DataRow 集合</param>
     7         /// <returns>列值</returns>
     8         private object GetvalbyDataSet(string colname,Type coltype, DataRow dr)
     9         {
    10             if (dr.Table.Columns.Contains(colname))
    11             {
    12                 if (typeof(int) == coltype)
    13                 {
    14                     return dr[colname] == null ? 0 : int.Parse(dr[colname].ToString());
    15                 }
    16                 if (typeof(DateTime) == coltype)
    17                 {
    18                     return dr[colname] == null ? DateTime.Parse("2016/9/22") : DateTime.Parse(dr[colname].ToString());
    19                 }
    20                 if (typeof(decimal) == coltype)
    21                 {
    22                     return dr[colname] == null ? decimal.Parse("0") : decimal.Parse(dr[colname].ToString());
    23                 }
    24                 string str = dr[colname] == null ? "" :  dr[colname].ToString();
    25                 return str;
    26             }
    27             else
    28             {
    29                 return "";
    30             }
    31         }
    

    “哎呀我去,非逼我说粗话,来个货,把代码码上来!”

    System.Windows.Forms:窗体操作

    View Code

    “好的,老大!”

    System.Drawing:图形操作

     

    哈哈哈,俺就是那个带点儿逗比的搬砖员儿!好吧,代码来了,小主,等急了吧?

    二、深入C#数据类型

    using System;
    using System.Speech.Synthesis;
    using System.Collections.Generic;
    
    namespace ReadTxt
    {
        class Program
        {
    
            static string num1 = "", firchar = "", lastchar = "", tempRe = "";
    
            static void Main(string[] args)
            {
    
                Console.Title = "语音计算器";
                bool jump = true;
                do
                {
    
                    ConsoleKeyInfo info = Console.ReadKey();
                    switch (info.Key)
                    {
                        case ConsoleKey.Escape: Environment.Exit(0); jump = false; break;
                        case ConsoleKey.NumPad0:    GetKeyRead("0");     break;
                        case ConsoleKey.NumPad1:    GetKeyRead("1");     break;
                        case ConsoleKey.NumPad2:    GetKeyRead("2");     break;
                        case ConsoleKey.NumPad3:    GetKeyRead("3");     break;
                        case ConsoleKey.NumPad4:    GetKeyRead("4");     break;
                        case ConsoleKey.NumPad5:    GetKeyRead("5");     break;
                        case ConsoleKey.NumPad6:    GetKeyRead("6");     break;
                        case ConsoleKey.NumPad7:    GetKeyRead("7");     break;
                        case ConsoleKey.NumPad8:    GetKeyRead("8");     break;
                        case ConsoleKey.NumPad9:    GetKeyRead("9");     break;
                        case ConsoleKey.Add:        GetKeyRead("加");    break;
                        case ConsoleKey.Subtract:   GetKeyRead("减");    break;
                        case ConsoleKey.Multiply:   GetKeyRead("乘");    break;
                        case ConsoleKey.Divide:     GetKeyRead("除");    break;
                        case ConsoleKey.Enter:
                            if (!string.IsNullOrEmpty(num1) && GetSignIsTrue(num1))
                            {
                                SetValue(num1);
                                num1 = "";
                            }
                            else
                            {
                                num1 = "";
                                if (!string.IsNullOrEmpty(num1))
                                {
                                    Console.Beep();
                                    Console.WriteLine("Error.");
                                }
                            }
                            break;
                        default:
                            break;
                    }
                } while (jump);
                Console.Read();
            }
    
            //判断用户输入的内容是否合法
            static void GetKeyRead(string str)
            {
                SpeechSynthesizer spvoice = new SpeechSynthesizer();
                spvoice.Rate = 1;
                spvoice.Volume = 100;
    
                if (!string.IsNullOrEmpty(num1))
                {
                    firchar = num1.Substring(0, 1);
                    lastchar = num1.Substring(num1.Length - 1, 1);
                }
    
                switch (str)
                {
                    case "加":
                        if (firchar != "加" && lastchar != "加")
                        {
                            if (lastchar != "减" && lastchar != "乘" && lastchar != "除")
                            {
                                num1 += str;
                            }
                            else
                            {
                                num1 = num1.Remove(num1.Length - 1);
                                num1 += str;
                            }
                        }
    
                        break;
                    case "减":
                        if (firchar != "减" && lastchar != "减")
                        {
                            if (lastchar != "加" && lastchar != "乘" && lastchar != "除")
                            {
                                num1 += str;
                            }
                            else 
                            {
                                num1 = num1.Remove(num1.Length - 1);
                                num1 += str;
                            }
                        }
    
                        break;
                    case "乘":
                        if (firchar != "乘" && lastchar != "乘")
                        {
                            if (lastchar != "加" && lastchar != "减" && lastchar != "除")
                            {
                                num1 += str;
                            }
                            else
                            {
                                num1 = num1.Remove(num1.Length - 1);
                                num1 += str;
                            }
                        }
                        break;
                    case "除":
                        if (firchar != "除" && lastchar != "除")
                        {
                            if (lastchar != "加" && lastchar != "减" && lastchar != "乘")
                            {
                                num1 += str;
                            }
                            else
                            {
                                num1 = num1.Remove(num1.Length - 1);
                                num1 += str;
                            }
                        }
                        break;
                    default:
                        num1 += str;
                        break;
                }
                spvoice.SpeakAsync(str);
                Console.Clear();
                Console.Write(tempRe + num1.Replace('加', '+').Replace('减', '-').Replace('乘', '*').Replace('除', '/').Replace("等于", "="));
            }
    
            static bool GetSignIsTrue(string num1) 
            {
                if (!string.IsNullOrEmpty(num1))
                {
                    firchar = num1.Substring(0, 1);
                    lastchar = num1.Substring(num1.Length - 1, 1);
                }
    
                return firchar != "加" && lastchar != "加" && firchar != "减" && lastchar != "减" && firchar != "乘" && lastchar != "乘" && firchar != "除" && lastchar != "除";
            }
    
            //计算
            static void SetValue(string num1)
            {
                List<double> array = new List<double>();
                List<string> sign = new List<string>();
                num1 = num1.Replace('加', '+').Replace('减', '-').Replace('乘', '*').Replace('除', '/');
                string tempCap = "";
                char[] MyChar = num1.ToCharArray();
                for (int i = 0; i < MyChar.Length; i++)
                {
                    if (MyChar[i].ToString() == "+" || MyChar[i].ToString() == "-" || MyChar[i].ToString() == "*" || MyChar[i].ToString() == "/")
                    {
                        array.Add(Convert.ToDouble(tempCap));
                        tempCap = "";
                        sign.Add(MyChar[i].ToString());
                    }
                    else
                    {
                        if (i == MyChar.Length - 1)
                        {
                            tempCap += MyChar[i].ToString();
                            array.Add(Convert.ToDouble(tempCap));
                        }
                        else
                        {
                            tempCap += MyChar[i].ToString();
                        }
                    }
                }
    
                double resultTemp = 0;
                for (int i = 0; i < sign.ToArray().Length; i++)
                {
                    if (sign[i] == "*")
                    {
                        resultTemp = array[i] * array[i + 1];
                        array[i] = resultTemp;
                        array.Remove(array[i + 1]);
                        sign.Remove(sign[i]);
                        resultTemp = 0;
                        i--;
                    }
                    else if (sign[i] == "/")
                    {
                        resultTemp = array[i] / array[i + 1];
                        array[i] = resultTemp;
                        array.Remove(array[i + 1]);
                        sign.Remove(sign[i]);
                        resultTemp = 0;
                        i--;
                    }
                }
    
                for (int i = 0; i < sign.ToArray().Length; i++)
                {
                    if (sign[i] == "+")
                    {
                        resultTemp = array[i] + array[i + 1];
                        array[i] = resultTemp;
                        array.Remove(array[i + 1]);
                        sign.Remove(sign[i]);
                        resultTemp = 0;
                        i--;
                    }
                    else if (sign[i] == "-")
                    {
                        resultTemp = array[i] - array[i + 1];
                        array[i] = resultTemp;
                        array.Remove(array[i + 1]);
                        sign.Remove(sign[i]);
                        resultTemp = 0;
                        i--;
                    }
                }
    
                double answ = array[0];
                array.Clear();
                sign.Clear();
                tempRe += num1.Replace('加', '+').Replace('减', '-').Replace('乘', '*').Replace('除', '/') + "= " + answ + "n";
                GetKeyRead("等于" + answ);
            }
        }
    }
    

    1.结构体:结构体是由struct修饰的类,结构体是值类型(枚举也是值类型)

    ok,这就是全部代码了,请容在下粗略的介绍下实现步骤:

    public struct Student
    {
    }

    1.既然是语音计算器,首先要解决的就是如何实现语音?

    2.拆箱和装箱:

    其实,语音功能实现起来并不复杂,微软早就封装好了一个,将文本转换成语音功能的类库,现在你要做的就是:找到它,然后把它引用到你的项目里!

    装箱:就是把值类型转换为引用类型

    什么?这个类库叫啥?

    object o=1;

    表急嘛,心急吃不了“热豆腐”,有可能“豆腐”还跑了呢,要耐心点儿,才能约到手!是吧?

    拆箱:就是把引用类型转换为值类型

    好吧,介绍下这个类库,它叫“System.Speech.dll”。.net FrameWork 的安装目录里就有它的身影!装了.net FrameWork 的童鞋,可以通过以下目录去寻觅它!

    int num=(int)o;

    大概是这个:C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5

    3.值传递和引用传递(有无ref修饰)

    寻寻觅觅,冷冷清清,凄凄惨惨戚戚!什么?没寻觅到?

    a.有ref修饰时,修改的值会永久保留

    好吧,教你一招

    b.无ref修饰时,是值类型的,修改的值不会永久保留

    金沙国际官网 5

    c.无ref修饰时,是引用类型的,修改的值会永久保留

     

    三、泛型集合

    打开C盘,直接搜索!

    1.集合的概念:

    没装的,那就去网上搜吧,自己下崽儿!哈哈~!愿意装的也可以装一下!

    集合就是将一堆数据类型的数据放在一起的一种容器,和数组是很相似的东西。

    找到的,直接引用到项目里就行了哈!

    2.集合的分类以及声明方法

    2.其次,别忘了引用下这两个命名空间:

    a.集合分为非泛型和泛型集合,非泛型又分单列(ArrayList)和双列(Hashtable),泛型也分单列(List<T>)和双列(Dictionary<K,V>)。

      using System.Speech.Synthesis;  //语音类库

    单列的T数据类型可以为object类型,双列的K,V也可以是object类型

      using System.Collections.Generic;  //数组集合类库

    b.集合的声明

    3.最后,简单介绍下文本转换成语音的功能!

    ArrayList list=new ArrayList();

    其实,也就几句话!

    Hashtable list=new Hashtable();

    SpeechSynthesizer spvoice = new SpeechSynthesizer();  //语音类
    spvoice.Rate = 1;            //使用 spvoice 设置朗读频率 [范围 -10 ~ 10] 
    spvoice.Volume = 80;         //使用 spvoice 设置朗读音量 [范围 0 ~ 100] 
    spvoice.SpeakAsync("大家好,我是博主小白!");   //开始读
    

    List<T> list=new List<T>();

    好了,其他的代码就要看小主的内力了,在下就不多说了!

    Dictionary<K,V> list=new Dictionary<K,V>();

    看小主骨骼惊奇,“英语非凡”,想是定能习得搬砖精髓,打遍天下需求,杀掉世间bug;然后走上淫僧巅峰,赢取大白美眉的!哈哈哈~!

    3.集合的方法和属性

     

    1.Add(),增加数据的方法

    拙文一篇,望各位海涵!

    2.Remove(),删除数据的方法,()里填的是一整条的数据,单列集合的删除,集合会去自动维护数据,这样集合不会出现某个索引的值是为空的

    技术讨论群:225443677 有意者欢迎骚扰,谢谢!

    3.RemoveAt(),同样也是删除数据的方法,()里填的是索引(单列)双列没有RemoveAt()方法,

     

    4.Clear(),清空集合的所有数据

    5.Count属性,可以得到集合有几条数据

    6.Capacity属性,集合的容量,集合的容量是成倍(二倍)的增加的,Count为0时,Capacity为0,Count为1时,Capacity为4

    7.Contains(),单列集合用来判断某个数据是否存在

    8.ContainsKey(),双列判断是否存在某个Key值

    9.ContainsValue(),双列判断是否存在某个Value值

    4.集合的遍历方法

    HashTable和Dictionary遍历不同就是,遍历值类型的时候,HashTable需要进行类型转换(拆箱,装箱)

    HashTable:

    (1).通过Key值遍历 foreach (string item in list.Keys) { Console.WriteLine(list[item]); }

    (2).通过value值遍历 foreach (Student item in list.Values) { Console.WriteLine((Student)item.Name); }

    (3).通过整体的双列集合遍历 foreach (DictionaryEntry item in list) { Console.WriteLine(item.Key); Console.WriteLine(((Student)item.Value).Name); }

    Dictionary:

    (1).通过Key值遍历 foreach (string item in list.Keys) { Console.WriteLine(list[item]); }

    (2).通过value值遍历 foreach (Student item in list.Values) { Console.WriteLine(item.Name); }

    (3).通过整体遍历 foreach (KeyValuePair<T,V> item in list) { Console.WriteLine(item.Key); Console.WriteLine((item.Value).Name); }

    四、深入类的方法

    1.方法重载:通过传的参数的不同从而调用不同的方法,方法名相同,参数类型不同,参数顺序不同,参数个数不同,和返回值无关

    参数类型不同:

    public void Play(int num){};

    public void Play(string name){};

    参数顺序不同:

    public void Play(int num,int age){};

    public void Play(int age,int num){};

    参数个数不同:

    public void Play(int num){};

    public void Play(string name,int num){};

    和返回值无关:

    public string Play(int num){};

    public int Play(int num){};

    2.类的构造:和类名相同,无返回值

    无参构造:

    public class Student

    本文由金沙国际官网发布于编程,转载请注明出处:DataSet集合直接根据传入的类转List金沙国际官网,

    关键词: