gpt4 book ai didi

c# - 获取结构/列表的特定值

转载 作者:行者123 更新时间:2023-11-30 20:18:21 26 4
gpt4 key购买 nike

我正在使用 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...?
}
}

最佳答案

如果您的武器收藏可能变得非常大,或者您需要经常在其中查找武器,我建议为此使用字典而不是列表(使用武器 ID 作为键)。查找will be much quicker using a Dictionary key而不是使用循环或 LINQ 搜索列表。

您可以通过修改代码来做到这一点,如下所示:

public Dictionary<int, data>_WeapList;

[...]

//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.ID, itm);//probable change
}

然后,要访问列表中的元素,只需使用语法:

_WeapList[weaponID].dmg; // To access the damage of the weapon with the given weaponID

防范无效 ID:

如果存在提供的weaponID 不存在的风险,您可以使用.ContainsKey()在尝试访问其成员之前首先检查它的方法:

if (_WeapList.ContainsKey(weaponID))
{
// Retrieve the weapon and access its members
}
else
{
// Weapon doesn't exist, default behaviour
}

或者,如果您习惯于使用 out 参数,您可以使用 .TryGetValue()而不是验证 - 这比单独调用 .ContainsKey() 更快:

data weaponData;
if (_WeapList.TryGetValue(weaponID, out weaponData))
{
// weaponData is now populated with the weapon and you can access members on it
}
else
{
// Weapon doesn't exist, default behaviour
}

希望对您有所帮助!如果您有任何问题,请告诉我。

关于c# - 获取结构/列表的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com