在Windows窗体项目中,我有两个类:createTextDef和CreateTextFile
在CreateTextFile类中,我有一个如下所示的构造函数:
public string Price { get; private set; }
public string Unlock { get; private set; }
public string Stock { get; private set; }
public CreateTextFile(string Price,string Unlock, bool stock)
{
this.Price = Price;
this.Unlock = Unlock;
if (stock)
Stock = "true";
else
Stock = "false";
}
在我的createTextDef类中,我必须使用在CreateTextFile类构造函数中创建的属性,如下所示:
public void CreateSingle()
{
string path = Common.PathToTextFile + CreateTextFile.TextName;
string text = File.ReadAllText(Common.templatePath + "Text files\\"+ "File.txt")
.Replace("10", CreateTextFile.Unlock)
.Replace("100", CreateTextFile.Price)
.Replace("true1", CreateTextFile.Stock)
File.WriteAlltext(path, text)
}
在Form1类中,我调用了CreateTextFile:
private void GenerateFile_Text_Click_1(object sender, EventArgs e)
{
if(single)
createText = new CreateTextFile(price, unlockLvl, true);
}
但是当我尝试在createTextDef类中访问这些属性值时,我只获得空值。当我在Form1类中调用CreateTextFile构造函数时,当我尝试从createTextDef类到达它时,值就消失了。我不知道如何继续,所以当我尝试从另一个类调用它们时,是否有人知道如何使属性值不会消失?
更清楚:我有3个值,我应该用CreateSingle方法中的其他字符串值替换它们但它们都只是用空字符串替换,因此我创建的文本文件是空的。当我调用CreateTextFile构造函数时,我没有放入空字符串。
我最好不要使用静态成员。
答案 0 :(得分:1)
空属性值的最可能原因是您在createText
中设置了GenerateFile_Text_Click_1
实例的属性,但在CreateSingle
中方法您从名为CreateTextFile
的其他实例读取属性。
最有可能的解决方案是在阅读信息时使用您为其指定值属性的createText
实例。
请注意,我也改变了替换顺序,因为调用.Replace(10)
也会替换字符串100
的前两个字符,您也将其用作占位符。
public void CreateSingle()
{
string source = Path.Combine(Common.templatePath, "Text files", "File.txt");
string dest = Path.Combine(Common.PathToTextFile, CreateTextFile.TextName);
string text = File.ReadAllText(source)
.Replace("100", createText.Price)
.Replace("10", createText.Unlock)
.Replace("true1", createText.Stock)
File.WriteAlltext(dest, text)
}
理想情况下,您可以考虑使用更多唯一字符串来代表模板中的占位符,例如"[Unlock]"
,"[Price]"
和"[Stock]"
,以避免Replace
中的含糊不清码。那条线看起来像:
string text = File.ReadAllText(source)
.Replace("[Unlock]", createText.Unlock)
.Replace("[Price]", createText.Price)
.Replace("[Stock]", createText.Stock)