变量从我在 C# 中的方法中泄漏
Variables are leaking from my methods in C#
我目前有一个代码块,除了少数变量外,它在整个程序中都在 Button Clicks 中重复出现。问题是,当我从单击一个按钮转到另一个按钮时,plHTML
开始从前一个按钮泄漏文本。在我尝试制作该方法之前,这并没有发生。
如何防止变量相互泄漏?
这是我尝试过的方法
String cleanCombo1;
String cleanCombo2;
String cleanCombo3;
String cleanCombo4;
String cleanCombo;
public string GetTextBetween(string firstPart, string secondPart, string lastPart)
{
String St1 = plHTMLP1.Text;
int pFrom1 = St1.IndexOf(firstPart) + firstPart.Length;
int pTo1 = St1.IndexOf(lastPart, pFrom1);
if (St1.Substring(pFrom1, pTo1 - pFrom1).Contains(secondPart))
{
cleanCombo1 = St1.Substring(pFrom1, pTo1 - pFrom1);
}
String St2 = plHTMLP2.Text;
int pFrom2 = St2.IndexOf(firstPart) + firstPart.Length;
int pTo2 = St2.IndexOf(lastPart, pFrom2);
if (St2.Substring(pFrom2, pTo2 - pFrom2).Contains(secondPart))
{
cleanCombo2 = St2.Substring(pFrom2, pTo2 - pFrom2);
}
String St3 = plHTMLP3.Text;
int pFrom3 = St3.IndexOf(firstPart) + firstPart.Length;
int pTo3 = St3.IndexOf(lastPart, pFrom3);
if (St3.Substring(pFrom3, pTo3 - pFrom3).Contains(secondPart))
{
cleanCombo3 = St3.Substring(pFrom3, pTo3 - pFrom3);
}
String St4 = plHTMLP4.Text;
int pFrom4 = St4.IndexOf(firstPart) + firstPart.Length;
int pTo4 = St4.IndexOf(lastPart, pFrom4);
if (St4.Substring(pFrom4, pTo4 - pFrom4).Contains(secondPart))
{
cleanCombo4 = St4.Substring(pFrom4, pTo4 - pFrom4);
}
cleanCombo = cleanCombo1 + cleanCombo2 + cleanCombo3 + cleanCombo4;
return cleanCombo;
}
我有三个按钮(目前)使用此方法。
这是其中一个按钮包含的代码示例
private void mButton_Click(object sender, EventArgs e)
{
String firstPart = "<strong>http://m2.";
String secondPart = "m.com</strong>";
String lastPart = "</p>";
GetTextBetween(firstPart, secondPart, lastPart);
plHTML.Text = FilterHTML(cleanCombo, "m.com");
}
不确定我制作的其他方法是否会影响代码,但这里是
public string FilterHTML(string cleanCombo, string EndOfString)
{
cleanCombo = cleanCombo.Replace("<strong>", "");
cleanCombo = cleanCombo.Replace("<br />", "");
cleanCombo = cleanCombo.Replace("</strong>", "");
cleanCombo = cleanCombo.Replace(EndOfString, "");
return cleanCombo;
}
我认为变量 cleanCombo1
、cleanCombo2
、cleanCombo3
、cleanCombo4
的范围有问题。这些应该在方法 GetTextBetween
的范围内声明。您的新方法也使用这些变量,如果 GetTextBetween
没有进入任何 if
块,它将在 cleanComboX
变量中重用垃圾值。
我目前有一个代码块,除了少数变量外,它在整个程序中都在 Button Clicks 中重复出现。问题是,当我从单击一个按钮转到另一个按钮时,plHTML
开始从前一个按钮泄漏文本。在我尝试制作该方法之前,这并没有发生。
如何防止变量相互泄漏?
这是我尝试过的方法
String cleanCombo1;
String cleanCombo2;
String cleanCombo3;
String cleanCombo4;
String cleanCombo;
public string GetTextBetween(string firstPart, string secondPart, string lastPart)
{
String St1 = plHTMLP1.Text;
int pFrom1 = St1.IndexOf(firstPart) + firstPart.Length;
int pTo1 = St1.IndexOf(lastPart, pFrom1);
if (St1.Substring(pFrom1, pTo1 - pFrom1).Contains(secondPart))
{
cleanCombo1 = St1.Substring(pFrom1, pTo1 - pFrom1);
}
String St2 = plHTMLP2.Text;
int pFrom2 = St2.IndexOf(firstPart) + firstPart.Length;
int pTo2 = St2.IndexOf(lastPart, pFrom2);
if (St2.Substring(pFrom2, pTo2 - pFrom2).Contains(secondPart))
{
cleanCombo2 = St2.Substring(pFrom2, pTo2 - pFrom2);
}
String St3 = plHTMLP3.Text;
int pFrom3 = St3.IndexOf(firstPart) + firstPart.Length;
int pTo3 = St3.IndexOf(lastPart, pFrom3);
if (St3.Substring(pFrom3, pTo3 - pFrom3).Contains(secondPart))
{
cleanCombo3 = St3.Substring(pFrom3, pTo3 - pFrom3);
}
String St4 = plHTMLP4.Text;
int pFrom4 = St4.IndexOf(firstPart) + firstPart.Length;
int pTo4 = St4.IndexOf(lastPart, pFrom4);
if (St4.Substring(pFrom4, pTo4 - pFrom4).Contains(secondPart))
{
cleanCombo4 = St4.Substring(pFrom4, pTo4 - pFrom4);
}
cleanCombo = cleanCombo1 + cleanCombo2 + cleanCombo3 + cleanCombo4;
return cleanCombo;
}
我有三个按钮(目前)使用此方法。
这是其中一个按钮包含的代码示例
private void mButton_Click(object sender, EventArgs e)
{
String firstPart = "<strong>http://m2.";
String secondPart = "m.com</strong>";
String lastPart = "</p>";
GetTextBetween(firstPart, secondPart, lastPart);
plHTML.Text = FilterHTML(cleanCombo, "m.com");
}
不确定我制作的其他方法是否会影响代码,但这里是
public string FilterHTML(string cleanCombo, string EndOfString)
{
cleanCombo = cleanCombo.Replace("<strong>", "");
cleanCombo = cleanCombo.Replace("<br />", "");
cleanCombo = cleanCombo.Replace("</strong>", "");
cleanCombo = cleanCombo.Replace(EndOfString, "");
return cleanCombo;
}
我认为变量 cleanCombo1
、cleanCombo2
、cleanCombo3
、cleanCombo4
的范围有问题。这些应该在方法 GetTextBetween
的范围内声明。您的新方法也使用这些变量,如果 GetTextBetween
没有进入任何 if
块,它将在 cleanComboX
变量中重用垃圾值。