在 foreach/for 循环中为变量重新赋值,然后在循环外使用该值?
Reassign a variable a value in a foreach/for loop, and then use that value outside of the loop?
我想使用并显示在 foreach 循环中使用的 c 的值(我为它分配了一个名为 test2 的变量),但是在 foreach 循环之外使用时该变量显示空值。如何访问 test2 或 c 的值?我曾尝试将 c/test2 的值附加到列表中,但无法将该列表的值显示为字符串。
class encryptionFunctionClass
{
List<string> textConvertedToArray = new List<string>();
List<string> charToMessageBox = new List<string>();
string inputText;
string inputTextToChar;
char test1; // Poor Naming Conventions Ik.
char test2; // Poor Naming Conventions Ik.
bool isReturn = false;
bool isNotReturn = true;
int test3;
char c;
public int caesarEncryptText(string inputText, int encryptionNumberShift)
{
textConvertedToArray.Add(inputText);
foreach (char c in inputText.ToString().ToCharArray())
{
int i = 0;
char test2 = c;
test1 = test2;
if ((char)c + encryptionNumberShift >= 24)
{
isReturn = true;
test2 = c;
charToMessageBox.Add(c.ToString());
}
else
{
isNotReturn = true;
test2 = c;
charToMessageBox.Add(c.ToString());
}
}
while(true)
MessageBox.Show(test2.ToString());
if(isReturn == true)
{
return (char)c - (int)26;
}
else
{
if(isNotReturn == true)
{
return (char) + (int)24;
}
}
}
}
在 public int caesarEncryptText(string inputText, int encryptionNumberShift)
中声明的局部变量隐藏(使它们无法访问,除非使用 this
关键字访问)class 具有相同名称的字段。
private string inputText; //←Hidden by the caesarEncryptText Method's variable `inputText`
private string inputTextToChar;
private char test1; // Poor Naming Conventions Ik.
private char test2; //←Hidden by the caesarEncryptText Method's foreach loop
private bool isReturn = false;
private bool isNotReturn = true;
private int test3;
private char c; //←Hidden by the caesarEncryptText Method's foreach loop
你想要的可能是这样的:
public class EncryptionFunctionClass {
private char c; //Default value of '[=11=]'
public char ShadowingExample(string inputText, int encryptionNumberShift) {
foreach (var c in inputText) {
//Play with `c` here will not affect private char c declared above.
var anotherChar = (char)(c + 24);//Etc..
}
return c;←Still '[=11=]'!!!!
}
public string CaesarEncryptText(string inputText, int encryptionNumberShift) {
var sb = new StringBuilder();
foreach (var c in inputText) { sb.Append((char)(c + encryptionNumberShift)); }
return sb.ToString();
}
}
C# 遵循块作用域。同名变量 c
和 test2
也作为 class 的成员变量存在。在方法中使用相同的命名变量会完全创建新变量,并且在 class 级别声明的成员变量会被抑制。因此,在 caesarEncryptText
方法中对 c
和 test2
变量所做的任何更改都不会影响在 class 级别定义的成员变量。
class encryptionFunctionClass
{
char test2; // Poor Naming Conventions Ik.
char c;
public int caesarEncryptText(string inputText, int encryptionNumberShift)
{
textConvertedToArray.Add(inputText);
foreach (char c in inputText.ToString().ToCharArray())
{
//other code
//this test2 variable is NOT your member variable
char test2 = c;
//remaining code
}
}
}
要实际更改成员变量,您有两种方法:
- 不要在您的方法中局部声明
test2
变量。然后如果你在你的方法中改变 test2
,它会改变你的成员变量。这是您理想情况下应该做的。 在 class 级别和方法级别具有相同的命名变量是脏代码。
如果您想更改成员变量,请在方法中使用 this
关键字访问成员变量,如下所示:
foreach (char c in inputText.ToString().ToCharArray())
{
//other code
//using this keyword will modify your member variable
this.test2 = c;
//remaining code
}
我想使用并显示在 foreach 循环中使用的 c 的值(我为它分配了一个名为 test2 的变量),但是在 foreach 循环之外使用时该变量显示空值。如何访问 test2 或 c 的值?我曾尝试将 c/test2 的值附加到列表中,但无法将该列表的值显示为字符串。
class encryptionFunctionClass
{
List<string> textConvertedToArray = new List<string>();
List<string> charToMessageBox = new List<string>();
string inputText;
string inputTextToChar;
char test1; // Poor Naming Conventions Ik.
char test2; // Poor Naming Conventions Ik.
bool isReturn = false;
bool isNotReturn = true;
int test3;
char c;
public int caesarEncryptText(string inputText, int encryptionNumberShift)
{
textConvertedToArray.Add(inputText);
foreach (char c in inputText.ToString().ToCharArray())
{
int i = 0;
char test2 = c;
test1 = test2;
if ((char)c + encryptionNumberShift >= 24)
{
isReturn = true;
test2 = c;
charToMessageBox.Add(c.ToString());
}
else
{
isNotReturn = true;
test2 = c;
charToMessageBox.Add(c.ToString());
}
}
while(true)
MessageBox.Show(test2.ToString());
if(isReturn == true)
{
return (char)c - (int)26;
}
else
{
if(isNotReturn == true)
{
return (char) + (int)24;
}
}
}
}
在 public int caesarEncryptText(string inputText, int encryptionNumberShift)
中声明的局部变量隐藏(使它们无法访问,除非使用 this
关键字访问)class 具有相同名称的字段。
private string inputText; //←Hidden by the caesarEncryptText Method's variable `inputText`
private string inputTextToChar;
private char test1; // Poor Naming Conventions Ik.
private char test2; //←Hidden by the caesarEncryptText Method's foreach loop
private bool isReturn = false;
private bool isNotReturn = true;
private int test3;
private char c; //←Hidden by the caesarEncryptText Method's foreach loop
你想要的可能是这样的:
public class EncryptionFunctionClass {
private char c; //Default value of '[=11=]'
public char ShadowingExample(string inputText, int encryptionNumberShift) {
foreach (var c in inputText) {
//Play with `c` here will not affect private char c declared above.
var anotherChar = (char)(c + 24);//Etc..
}
return c;←Still '[=11=]'!!!!
}
public string CaesarEncryptText(string inputText, int encryptionNumberShift) {
var sb = new StringBuilder();
foreach (var c in inputText) { sb.Append((char)(c + encryptionNumberShift)); }
return sb.ToString();
}
}
C# 遵循块作用域。同名变量 c
和 test2
也作为 class 的成员变量存在。在方法中使用相同的命名变量会完全创建新变量,并且在 class 级别声明的成员变量会被抑制。因此,在 caesarEncryptText
方法中对 c
和 test2
变量所做的任何更改都不会影响在 class 级别定义的成员变量。
class encryptionFunctionClass
{
char test2; // Poor Naming Conventions Ik.
char c;
public int caesarEncryptText(string inputText, int encryptionNumberShift)
{
textConvertedToArray.Add(inputText);
foreach (char c in inputText.ToString().ToCharArray())
{
//other code
//this test2 variable is NOT your member variable
char test2 = c;
//remaining code
}
}
}
要实际更改成员变量,您有两种方法:
- 不要在您的方法中局部声明
test2
变量。然后如果你在你的方法中改变test2
,它会改变你的成员变量。这是您理想情况下应该做的。 在 class 级别和方法级别具有相同的命名变量是脏代码。 如果您想更改成员变量,请在方法中使用
this
关键字访问成员变量,如下所示:foreach (char c in inputText.ToString().ToCharArray()) { //other code //using this keyword will modify your member variable this.test2 = c; //remaining code }