我们的想法是重用上一次循环迭代中使用的字符串。
public void StringMain()
{
string temp;
int times = 0;
do
{
string input;
string reuse;
if (times == 0)
{
input = Request();
times++;
temp = input;
}
else if (times > 0)
{
reuse = Reuse();
if (reuse == "Y" || reuse == "y")
{
input = temp;
// error here: unassigned local variable temp
}
else
{
input = Request();
temp = input;
}
}
// Do stuff with string
} while (Console.ReadLine() != "Q" || Console.ReadLine() != "q")
我认为通过将string temp
变量等同于初始input
并将新temp
存储在do循环之外,我可以将input
设置为{如果用户请求,则在下一次迭代中{1}}变量不重置temp
变量。 (推理>默认字符串初始化为空)。从而有效地复制粘贴前一个字符串。
但是,我收到错误:在temp
的注明行中未分配的局部变量。我理解为什么,temp
目前没有任何价值,但是在第一次迭代后会得到一个值。
我可以这样做,还是以完全错误的方式解决这个问题?
如果我有如何复制上一次循环迭代中使用的字符串?
temp
和Request()
方法只返回字符串并要求用户输入。如果使用它们,它们在下面:
Reuse()
注意:如果可能的话,我不想使用任何预定义的方法。
我查看了以下问题,但它们都与数组有关,并且都在java中。他们甚至都没有接近我想做的事情,所以我无法使用相同的概念。
Button to show previous string
add string to string array and display last/previous string in that string array
提前致谢!
答案 0 :(得分:0)
错误的直接原因是未分配的temp
字符串。但是,更深层原因是太复杂代码,保持简单:
// bool: Reuse is supposed to return true/false (i.e. yes/no)
// static: You don't want any "this" in the context
private static bool Reuse() {
Console.WriteLine("Reuse previous string?");
Console.WriteLine("Y - N?");
return Console
.ReadLine()
.Trim() // Be nice and trim out spaces (esp. trailing ones)
.Equals("y", StringComparison.OrdinalIgnoreCase);
}
public void StringMain() {
//bool: we don't want count, say 15-th input, but a fact is it a first try
bool firstTime = true;
string temp = null; // Make compiler be happy, assign the local variable
do {
// We can reuse if and only if
// 1. It's not the first Time run
// 2. We allow it, i.e. Reuse() returns true
input = !firstTime && Reuse()
? temp
: Request();
firstTime = false;
temp = input;
// Do stuff with string
}
while (!Console.ReadLine().Trim().Equals("q", StringComparison.OrdinalIgnoreCase));
}