晚上好;我有一个有下拉列表的应用程序;该下拉列表旨在是可由用户更改的常见访问网站的列表。 我的问题是如何将这些值存储在允许用户更改它的庄园中。 例;我作为用户,决定我想让谷歌成为我的第一个网站,而youtube是我的第二个网站。
我考虑制作“设置”文件,但将20多个网站放入设置文件然后在启动时加载它是否切实可行?或者是本地数据库,但这对于简单的需求来说可能是过度的。
请指出正确的方向。
答案 0 :(得分:2)
鉴于你已经排除了数据库(可能是出于正确的原因......因为对于一个小应用程序可能会过度杀死),我建议将数据写入本地文件..但不是纯文本.. 但最好序列化为XML或JSON。
这种方法至少有两个好处 -
将来可以存储更复杂的数据。例如 - 虽然顺序可以是隐式的,但可以使其显式..或者像上次使用网址等其他数据等。
结构化数据更容易验证随机损坏..如果是纯文本文件..确保其完整性将更加困难。
答案 1 :(得分:1)
你显然需要某种持久性,有几种选择:
本地数据库 - 正如你所指出的那样,完全矫枉过正。您只是存储列表,而不是关系数据
简单文字文件 - 很简单,但也许不是最“专业”的方式。对此文件使用XML序列化将允许复杂的数据类型。
设置文件 - 这些偏好真的是设置吗?如果是,那么这是有道理的。
我会选择2号。听起来你不需要任何花哨的编码或安全性,所以只需将所有内容存储在文本文件中。 * .ini文件往往符合此描述,但您可以使用任何所需的扩展名。设置文件似乎不是此方案的正确位置。
答案 2 :(得分:1)
最好的方法是在c#中使用Serializer和Deserializer的强大功能,这样你就可以在面向对象的文件中使用它了。与此同时,您不必担心存储到文件等...等等......
以下是我为您快速撰写的示例代码。
using System;
using System.IO;
using System.Collections;
using System.Xml.Serialization;
namespace ConsoleApplication3
{
public class UrlSerializer
{
private static void Write(string filename)
{
URLCollection urls = new URLCollection();
urls.Add(new Url { Address = "http://www.google.com", Order = 1 });
urls.Add(new Url { Address = "http://www.yahoo.com", Order = 2 });
XmlSerializer x = new XmlSerializer(typeof(URLCollection));
TextWriter writer = new StreamWriter(filename);
x.Serialize(writer, urls);
}
private static URLCollection Read(string filename)
{
var x = new XmlSerializer(typeof(URLCollection));
TextReader reader = new StreamReader(filename);
var urls = (URLCollection)x.Deserialize(reader);
return urls;
}
}
public class URLCollection : ICollection
{
public string CollectionName;
private ArrayList _urls = new ArrayList();
public Url this[int index]
{
get { return (Url)_urls[index]; }
}
public void CopyTo(Array a, int index)
{
_urls.CopyTo(a, index);
}
public int Count
{
get { return _urls.Count; }
}
public object SyncRoot
{
get { return this; }
}
public bool IsSynchronized
{
get { return false; }
}
public IEnumerator GetEnumerator()
{
return _urls.GetEnumerator();
}
public void Add(Url url)
{
if (url == null) throw new ArgumentNullException("url");
_urls.Add(url);
}
}
}