我可以在代码中永久保存C#代码中的键/项吗?:
class Program
{
public class Variable
{
public object Value { get; set; }
}
static void Main(string[] args)
{
Console.WriteLine("Hi, please log in...");
Console.WriteLine("Enter your username: ");
string y = Console.ReadLine();
Console.WriteLine("Enter your passcode: ");
string n = Console.ReadLine();
Dictionary<String, String> usersDict = new Dictionary<String, String>();
bool exists = usersDict.ContainsKey("n") ? usersDict["n"] == "y" : false;
if (exists == true)
{
Console.WriteLine("Hello; "+y);
Console.ReadLine();
}
else
{
usersDict.Add(n, y);
Console.WriteLine("You have been added: " + y);
Console.ReadLine();
}
}
}
所以有人可以创建一个帐户,然后另一天登录? 非常感谢!
答案 0 :(得分:0)
您问题的简短回答不是您目前的设置方式。
此时,一旦程序完成main函数,主要的堆栈帧将被释放,导致所有内存被释放。这适用于您运行的所有程序。
要解决此问题,您需要设置一个非易失性文件或存储系统(文本文件,XML文档,数据库等),以保持您希望保留在程序之外的数据。
为了简单起见,我建议您坚持使用文本文件,直到您可以了解有关IO的更多内容。
这些链接应该为您提供一个起点:
答案 1 :(得分:0)
DataTable可以替代Dictionary,因为DataTable具有方便的ReadXML和WriteXML方法,允许您将数据写入XML格式的文件。
这是一种将Dictionary加载到DataTable并将其写入文件的方法:
void WriteDictionaryToFile(Dictionary<string, string> dict, string filename)
{
using (DataTable dt = new DataTable("Dict"))
{
dt.Columns.Add("Key", typeof(string));
dt.Columns.Add("Value", typeof(string));
foreach (var kvp in dict)
{
dt.Rows.Add(kvp.Key, kvp.Value);
}
dt.WriteXml(filename);
}
}
从文件中读取字典的方法:
void ReadDictionaryFromFile(Dictionary<string, string> dict, string filename)
{
DataTable dt = new DataTable("Dict");
dt.Columns.Add("Key", typeof(string));
dt.Columns.Add("Value", typeof(string));
dt.ReadXml(filename);
foreach (DataRow row in dt.Rows)
{
dict[row[0].ToString()] = row[1].ToString();
}
}
这些方法肯定需要添加一些异常处理。
您还可以使用类型参数代替“string”来使方法通用。例如:
void ReadDictionaryFromFile<T,U>(Dictionary<T, U> dict, string filename)
{
DataTable dt = new DataTable("Dict");
dt.Columns.Add("Key", typeof(T));
dt.Columns.Add("Value", typeof(U));
dt.ReadXml(filename);
foreach (DataRow row in dt.Rows)
{
dict[(T)row[0]] = (U)row[1];
}
}
答案 2 :(得分:0)
如果你想要的只是存储字典并在需要时将其恢复,那么你可以使用JSON Serialize / Deserialize来实现。我使用下面的Newtonsoft JSON(也可通过Nuget)库进行序列化/反序列化。
Dictionary<string, string> myDictionary = new Dictionary<string, string> { { "1", "A" }, { "2", "B" } };
//Serialize Dictionary to string and store in file
string json = Newtonsoft.Json.JsonConvert.SerializeObject(myDictionary);
System.IO.File.WriteAllText(@"C:\Docs\json.txt", json);
//Read serialized dictionary json string and Deserialize to Dictionary object
string jsonString = System.IO.File.ReadAllText(@"C:\Docs\json.txt");
Dictionary<string, string> deserializedDictionary = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(jsonString);
希望这能帮到你......