0

我想在 .NET 中使用 ListBox1.SaveToFile 方法,但我找不到与该方法等效的任何东西。我在 MSDN 图书馆网站上搜索过,但我空手而归。.NET 中是否有等效方法?

提前致谢,

4

2 回答 2

2

真棒的问题。您可以创建自己的超级酷方法!

public static class ListBoxExtensions
{
    public static IEnumerable<TData> GetData<TData>(this ListBox listbox)
    {
        var data = new List<TData>();
        foreach (var item in listbox.Items)
        {
            data.Add((TData) item);
        }
        return data;
    }

    public static void SetData<TData>(this ListBox listbox, IEnumerable<TData> dataToSet)
    {
        listbox.Items.Clear();

        foreach (var item in dataToSet)
        {
            listbox.Items.Add(item);
        }
    }
}

public static class SerializerHelper
{
    public static void Save<TXmlSerializableData>(IEnumerable<TXmlSerializableData> data, string outputFile)
        where TXmlSerializableData : class
    {
        if (File.Exists(outputFile))
        {
            File.Delete(outputFile);
        }
        var serializer = new XmlSerializer(typeof (TXmlSerializableData));
        using (var stream = File.OpenWrite(outputFile))
        {
            foreach (var item in data)
            {
                serializer.Serialize(stream, item);
            }
        }
    }

    public static IEnumerable<TData> Load<TData>(string inputFile)
        where TData: class
    {
        var result = new List<TData>();
        if (!File.Exists(inputFile))
        {
            return result;
        }
        var serializer = new XmlSerializer(typeof(TData));
        using (var stream = File.OpenRead(inputFile))
        {
            TData itemToAdd;
            do
            {
                itemToAdd = (TData) serializer.Deserialize(stream);
                if (itemToAdd != null)
                {
                    result.Add(itemToAdd);
                }
            } while (itemToAdd != null);
        }
        return result;
    }
}
var data = listbox.GetData<TSerializableType>();
SerializerHelper.Save(data, "Secret file.txt");
and your type must be serializable and marked with [XmlSerializable] attribute.
于 2012-05-01T20:05:59.453 回答
1

我认为最明智的解决方案是将列表框的内容序列化为 XML

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

于 2012-05-01T20:02:38.310 回答