将二进制读取到列表
本文关键字:列表 二进制 读取 | 更新日期: 2023-09-27 17:56:13
我正在尝试创建一个保存到文件中的引号列表。一旦引号显示在控制台上,我会将布尔值更改为 true。索引用于处理要在控制台上显示的报价。首先,我尝试了File.WriteAllLines,但这不适用于我的Quotes类。
似乎我将列表序列化为文件的尝试可以正常工作,但是我不知道如何在应该从文件读取到myList2的代码中摆脱CS1061。
我真的很想得到一些反馈。代码只是为了我自己的学习和娱乐。
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace Quotes
{
// A quote followed by a bool to show if it has been showed recently and an index to navigate the list.
[Serializable]
class Quotes
{
private string quote;
private bool shown;
private int index;
public Quotes(string _quote, bool _shown, int _index)
{
quote = _quote;
shown = _shown;
index = _index;
}
public string Quote
{
get
{
return quote;
}
set
{
quote = value;
}
}
public bool Shown
{
get
{
return shown;
}
set
{
shown = value;
}
}
public int Index
{
get
{
return index;
}
set
{
index = value;
}
}
public override string ToString()
{
return string.Format("{0} {1} {2}", quote, shown, index);
}
}
class Program
{
static void Main(string[] args)
{
// Set a variable to the My Documents path.
string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//List<Quotes> myList = new List<Quotes>();
var myList = new List<Quotes>();
myList.Add(new Quotes("One", false, 1));
myList.Add(new Quotes("Two", false, 2));
myList.Add(new Quotes("Three", false, 3));
myList.Add(new Quotes("Four", false, 4));
//Write the list to a file. Expand to accept user input and add at the end of the file.
try
{
using (Stream stream = File.Open(mydocpath + @"'WriteLines.txt", FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream, myList);
}
}
catch (IOException)
{
}
//Read from a file and write to the list.Put in a method when it works.
try
{
using (Stream stream = File.Open(mydocpath + @"'WriteLines.txt", FileMode.Open))
{
BinaryFormatter bin = new BinaryFormatter();
var myList2 = (List<Quotes>)bin.Deserialize(stream);
foreach (var quote in myList2)
{
//Why is this not working? Where should I define quote??
Console.WriteLine("{0}, {1}, {2}", myList2.quote, myList2.shown, myList2.index);
}
}
}
catch (IOException)
{
}
}
}
}
目前您的代码尝试访问 myList2.quote
,但即使在 foreach
块中,myList2
仍然是列表本身,而不是"该列表中的当前项"。
foreach
将列表中的每个单独的Quote
对象分配给var quote
变量。在foreach
块中,您可以使用以下命令访问该报价的属性:
Console.WriteLine("{0}, {1}, {2}", quote.Quote, quote.Shown, quote.Index);
(请注意,quote.quote
是私有字段,而quote.Quote
是您可以访问的公共属性)
foreach 循环在每次运行时都会在名为 quote 的变量中创建列表中每个报价的实例
foreach (var quote in myList2)
因此,您应该在循环中的代码中引用该变量。
{
Console.WriteLine("{0}, {1}, {2}", quote.Quote, quote.Shown, quote.Index);
}
谢谢一堆。我设法让自己感到困惑。现在很明显我犯了错误。
同样明显的是,我需要研究在这个网站上发布的位置和方式。谢谢你对我这样的菜鸟温柔。