【发布时间】:2013-05-13 08:24:33
【问题描述】:
我正在尝试创建一个简单的“库存”系统来存储项目,其中键是项目名称,其余信息存储为值。但是,我很难弄清楚如何阅读这些信息。例如,如果我说一个包含 10 个项目的列表,并且我想从下面概述的关键“电视”中选择项目“类型”信息,我该怎么做?
television {large, 5, 3, false, dynamic, 0.8, 20}
Hashtable myItems = new Hashtable();
protected virtual bool OnAttempt_AddItem(object args) {
object[] arr = (object[])args;
string ItemType = (string)arr[0];
string ItemName = (string)arr[1];
int ItemAmount = (arr.Length == 2) ? (int)arr[2] : 1;
int ItemACanHave = (arr.Length == 3) ? (int)arr[3] : 1;
bool ItemClear = (bool)arr[4];
string ItemEffect = (string)arr[5];
float ItemModifier = (float)arr[6];
int ItemWeight = (int)arr[7];
// enforce ability to have atleast 1 item of each type
ItemACanHave = Mathf.Max(1, ItemACanHave);
myItems[ItemName] = new object[] {ItemType, ItemAmount, ItemACanHave, ItemClear, ItemEffect, ItemModifier, ItemWeight };
return true;
}
【问题讨论】:
-
您有什么理由仍在使用非泛型
Hashtable集合而不是Dictionary<,>? (听起来您应该创建一个Item类来封装所有这些值。) -
没用过HashTable,但是使用自定义实体类有什么顾虑吗?
-
我对 C# 及其数组类型相当陌生。如果有更好的方法,如果有人能介绍给我,我将不胜感激。
-
你熟悉OOP吗?为您的项目定义类并使用通用 Dictionary
创建结构良好且足够快的数据实体。