我已经宣布了下面的字典 -
Dictionary<int, string> dic = new Dictionary<int, string>()
{
{977,"String1"},
{1021,"String2"},
{784,"String3"},
{801, "String4"}
};
在我的textfile中,值将包含这样的内容 -
977,"String1",
1021,"String2",
784,"String3",
801, "String4"
我想在文本文件中手动存储上面的字典键和值,并希望通过for循环访问类似字典。
喜欢这个 -
foreach (KeyValuePair<int, string> pair in dic)
{
if (pair.Key == any_integer_value_to_compare)
{
Console.WriteLine(pair.Value);
}
}
我该怎么做?
答案 0 :(得分:1)
您可以使用序列化/反序列化来存储和检索XML文件中的字典数据。就性能而言,它是更好的方法。
以下是如何实现这一点:
声明课程项目:
public class item
{
[XmlAttribute]
public int id;
[XmlAttribute]
public string value;
}
您的词典:
Dictionary<int, string> dict = new Dictionary<int, string>()
{
{977,"String1"},
{1021,"String2"},
{784,"String3"},
{801, "String4"}
};
创建序列化程序对象:
XmlSerializer serializer = new XmlSerializer(typeof(item[]),newXmlRootAttribute() { ElementName = "items" });
<强>序列化强>
serializer.Serialize(stream,dict.Select(kv=>new item(){id = kv.Key,value=kv.Value}).ToArray() );
<强>反序列化强>
var myDict = ((item[])serializer.Deserialize(stream)).ToDictionary(i =>i.id, i => i.value);
访问字典值
foreach (KeyValuePair<int, string> pair in myDict )
{
if (pair.Key == any_integer_value_to_compare)
{
Console.WriteLine(pair.Value);
}
}
通过这种方式,您可以系统地将字典值的状态存储在特定实例中,稍后通过反序列化XML文件来访问它。
答案 1 :(得分:0)
创建或覆盖CSV文件(注意:没有空格和引号)
977,String1
1021,String2
784,String3
801,String4
你可以使用Linq
File.WriteAllLines(@"C:\MyTest\MyFile.txt", dic
.Select(pair => String.Join(",", pair.Key, pair.Value)));
如果要为值添加引号,请添加它们(最简单的实现)
File.WriteAllLines(@"C:\MyTest\MyFile.txt", dic
.Select(pair => String.Join(",", pair.Key, "\"" + pair.Value + "\"")));
你不能在行
之后添加空格 {801, "String4"},
完全等于
{801,"String4"},
如果您想将字典转换为String
(然后将其合并
与其他一些文本按顺序放入文本文件中):
String text = String.Join(Environment.NewLine, dic
.Select(pair => String.Join(",", pair.Key, pair.Value))