程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 通過反射獲取數據庫的數據 將其轉化為相應類型的數據,獲取數據庫

通過反射獲取數據庫的數據 將其轉化為相應類型的數據,獲取數據庫

編輯:C#入門知識

通過反射獲取數據庫的數據 將其轉化為相應類型的數據,獲取數據庫


反射可以動態獲取數據的類型,Type 類可以獲取其中的 字段、方法、屬性等。 

尤其是將字段與屬性做區分可以讓我們可以獲取,自己想獲得的。廢話不多說上代碼。

先將數據導入的類,寫下:

 1 using System;
 2 using UnityEngine;
 3 
 4 namespace ARPGSimpleDemo.Skill
 5 {
 6     /// <summary>
 7     /// 技能數據
 8     /// </summary>
 9     [Serializable]
10     public class SkillData
11     {
12         /// <summary>技能擁有者</summary>
13         [HideInInspector]
14         public GameObject Owner;
15         /// <summary>技能編號</summary>
16         public int skillID{set;get;}
17         /// <summary>技能圖標</summary>
18         public string skillIcon { set;get;}
19         /// <summary>描述</summary>
20         public string description{set;get;}  
21         /// <summary>技能名稱</summary>
22         public string name{set;get;}
23         /// <summary>持續時間</summary>
24         public float durationTime{set;get;} 
25         /// <summary>在持續時間內,兩次傷害之間的間隔時間</summary>
26         public float damageInterval{set;get;}
27         /// <summary>傷害比</summary>
28         public float damage {set;get;} 
29         /// <summary>冷卻時間</summary>
30         public int coolTime{set;get;}
31         /// <summary>冷卻剩余</summary>
32         public int coolRemain;
33         /// <summary>魔法消耗</summary>
34         public int costSP{set;get;} 
35         /// <summary>攻擊距離</summary>
36         public float attackDisntance{set;get;}  
37         /// <summary>攻擊目標</summary>
38         [HideInInspector]
39         public GameObject[] attackTargets;
40         /// <summary>攻擊目標的TAG</summary>
41         public string[] attckTargetTags{set;get;}
42         /// <summary>技能等級</summary>
43         public int level{set;get;} 
44         /// <summary>技能預制對象</summary>
45         public GameObject skillPrefab;
46         /// <summary>預制文件名</summary>
47         public string prefabName{set;get;}
48         /// <summary>攻擊范圍 線形,矩形,扇形,圓形</summary>
49         public DamageMode damageMode{set;get;} 
50         /// <summary>攻擊類型,單攻,群攻</summary>
51         public SkillAttackType  attackType{set;get;}
52         /// <summary>是否激活</summary>
53         public bool Activated;
54         /// <summary>技能對應的動畫名稱 </summary>
55         public string animtionName{set;get;}
56         /// <summary> 攻擊范圍角度</summary>
57         public int attackAngle{set;get;}
58         /// <summary>目標受擊特效</summary>
59         public string hitFxName{set;get;}
60         public GameObject hitFxPrefab;
61         /// <summary>下一個連擊技能編號</summary>
62         public int nextBatterId{set;get;}
63    
64       }
65 }

下面是獲取數據  並放入 

 1     /// <summary>
 2     /// 將數據庫數據放入技能管理類中
 3     /// </summary>
 4     /// <param name="jobId">職業ID</param>
 5     void InitSkill(int jobId)
 6     {
 7         //先將數據庫打開
 8         OperatingDB.Instance.CreateDataBase();
 9         //遍歷表中所有行
10         SqliteDataReader skill = OperatingDB.Instance.db.ReadFullTable("T_Skill" + jobId);
11         while (skill.Read())
12         {
13             SkillData sd = new SkillData();
14             //反射獲取
15             Type t = typeof(SkillData);
16             int i = 0;
17             //遍歷SkillData所有屬性 t.GetProperties
18             foreach (var item in t.GetProperties())
19             {
20                 i++;
21                 //獲取屬性 判斷 是否為 string
22                 if (item.PropertyType.Equals(typeof(string)))
23                     item.SetValue(sd, skill[i].ToString(), null); //賦值
24                 //獲取屬性 判斷 是否為 float
25                 else if (item.PropertyType.Equals(typeof(float)))
26                     item.SetValue(sd, float.Parse(skill[i].ToString()), null);
27                 //獲取屬性 判斷 是否為 string[]
28                 else if (item.PropertyType.Equals(typeof(string[])))
29                 {
30                     string[] str = skill[i].ToString().Split(',');
31                     item.SetValue(sd, str, null);
32                 }
33                 //獲取屬性 其余 其中枚舉可以與int做轉換
34                 else
35                     item.SetValue(sd, int.Parse(skill[i].ToString()), null);
36             }
37             //獲取物體本身的技能管理類 將得到的類傳入
38             GetComponent<CharacterSkillManager>().skills.Add(sd);
39         }
40         //關閉數據庫
41         OperatingDB.Instance.db.CloseSqlConnection();
42     }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved