我有这两个类:
public class Message
{
string Message;
string Code;
}
public class MessageInitializer
{
DataSet ds;
DataRow dr;
message[] ms;
}
Run Code Online (Sandbox Code Playgroud)
我想像这样创建一个构造函数MessageInitializer:
MessageInitializer()
{
this.ms = new Message[ds.Tables[0].Rows.Count];
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
dr = ds.Tables[0].Rows[i];
ms[(string)dr.ItemArray[0]] = (string)dr.ItemArray[1];
}
}
Run Code Online (Sandbox Code Playgroud)
但是数组的索引必须是int类型.我不知道如何解决这个问题:
ms[(string)dr.ItemArray[0]] = (string)dr.ItemArray[1];
Run Code Online (Sandbox Code Playgroud)
更新:
代码格式是这样的字符串:[001-001-001],所以我无法将其转换为整数.
你不再需要Message类了.使用如下字典解决了问题:
public class MessageInitializer
{
DataSet ds;
DataRow dr;
Dictionary<string, string> ms;
public MessageInitializer()
{
this.ms = new Dictionary<string,string>(ds.Tables[0].Rows.Count);
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
dr = ds.Tables[0].Rows[i];
ms[(string)dr.ItemArray[0]] = (string)dr.ItemArray[1];
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这会有所帮助.
如果您只想从数据库中获取所有消息的列表,那么您可以使用下面的代码。请注意,List而不是Array. 使用更方便、速度更快。
public class Message
{
string Message;
string Code;
}
public class MessageInitializer
{
DataSet ds;
DataRow dr;
List<Message> ms;
MessageInitializer()
{
this.ms = new List<Message>();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
dr = ds.Tables[0].Rows[i];
ms.Add(new Message
{
Code = dr.ItemArray[0].ToString(),
Message = dr.ItemArray[1].ToString(),
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
您提到您有几百万条记录。List如果您想连续访问项目,将表现良好。如果您想以非顺序方式访问项目,我建议您改用Dictionary(以提高搜索性能):
public class MessageInitializer
{
DataSet ds;
DataRow dr;
Dictionary<string, Message> ms;
MessageInitializer()
{
this.ms = new Dictionary<string, Message>();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
dr = ds.Tables[0].Rows[i];
ms.Add(dr.ItemArray[0].ToString(), new Message
{
Code = dr.ItemArray[0].ToString(),
Message = dr.ItemArray[1].ToString(),
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式访问消息:
var message = ms["001-001-001"];
Run Code Online (Sandbox Code Playgroud)
它将比访问随机List项目快几个数量级:
var message - ms.First(x => x.Code == "001-001-001");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |