【发布时间】:2023-03-12 23:13:01
【问题描述】:
我正在使用 Unity3D + C# 创建游戏。
我现在得到的是:一个 SQL 数据表,由 8 列组成,总共包含 3 个条目,以及一个包含每个条目的列表“_WeapList”(如下所示)。
public struct data
{
public string Name;
public int ID, dmg, range, magazin, startammo;
public float tbtwb, rltimer;
}
List<data> _WeapList;
public Dictionary<int, data>_WeapoList; //probable change
[...]
//reading the SQL Table + parse it into a new List-entry
while (rdr.Read())
{
data itm = new data();
itm.Name = rdr["Name"].ToString();
itm.ID = int.Parse (rdr["ID"].ToString());
itm.dmg = int.Parse (rdr["dmg"].ToString());
itm.range = int.Parse (rdr["range"].ToString());
itm.magazin = int.Parse (rdr["magazin"].ToString());
itm.startammo = int.Parse (rdr["startammo"].ToString());
itm.tbtwb = float.Parse(rdr["tbtwb"].ToString());
itm.rltimer = float.Parse(rdr["rltimer"].ToString());
_WeapList.Add(itm);
_WeapoList.Add(itm.ID, itm);//probable change
}
现在我想创建一个“武器”类,它具有相同的 8 个字段,并通过给定的 ID 输入它们
如何提取列表/结构中特定项(由 int ID 确定,始终唯一)的值?
public class Weapons : MonoBehaviour
{
public string _Name;
public int _ID, _dmg, _range, _magazin, _startammo;
public float _tbtwb, _rltimer;
void Start()
{//Heres the main problem
_Name = _WeapoList...?
_dmg = _WeapoList...?
}
}
【问题讨论】:
-
如果您要经常进行这些查找,为什么不使用字典而不是列表呢?类似于
Dictionary<int, data> _WeapList,索引是武器的ID。然后你可以用_WeapList[weaponID]访问它,它会比使用循环/LINQ搜索列表快很多。 -
您可能想重新考虑使用可变结构。我建议要么将其设为一个类(使用属性而不是公共字段),要么通过添加一个设置私有字段并公开只读属性的构造函数来使结构不可变。 stackoverflow.com/questions/441309/why-are-mutable-structs-evil
-
首先:谢谢,我以前从未使用过 LINQ 表达式,尽管我也会重新考虑结构问题。尽管如此,我不明白如何输入字典,也不知道如何找到例如 ID 为“3”的武器的 int dmg。我创建了一个字典并将这个“_WeapoList.Add(itm.ID, itm);”进入 while(rdr.Read()){ ... }。我如何将“dmg”值解析为我的武器类? dmg = 数据库._WeapList[ ??? ](我已将这些更改放入上面的代码中)
-
@Csharpest 你从
_WeapList[weaponID]得到一个data对象。所以要访问它的任何成员,只需使用.语法,例如。_WeapList[weaponID].dmg. -
@Programmer 我想首先确定 OP 出于某种原因并不反对使用 Dictionary - 因为听起来他正在考虑它,我想我很快就会把它作为答案。跨度>