在.NET中是否存在等效的SaveToFile方法?

时间:2012-05-01 20:00:08

标签: .net listbox delphi-prism listboxitems

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

提前致谢,

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:1)

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

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