Answer the question
In order to leave comments, you need to log in
Hide variable scope?
Hello.
From the "want". I want to hide a variable in a method/function from the one declared earlier in the code.
int i=0;
.
.
.
for(int j=0; j<=N; j++){
// Вот тут хочу, чтобы i была не видна и я получал ошибку компиляции.
// Очевидно, что я хочу использовать в качестве индекса массива переменную "j",
// но из-за того, что применил copy-paste мог не заметить.
if(elem[i]==null){
}
}
// Тут нужно вернуть "видимость" i.
Answer the question
In order to leave comments, you need to log in
A variable can be placed in a block, in which case the variable will be restricted to that block only:
int Test()
{
int result = 0;
{
int i = 10;
for (int j = 0; j < 10; j++)
{
result += i;
}
}
{
string i = "xyz";
Console.WriteLine(i);
}
return result;
}
One option would be to remove the i variable.
After deletion, all uses of the variable i will be highlighted
It is possible to write a Code Analyzer that will generate a compilation error if a variable is used inside a block that is marked in some way, such as a special comment with names of forbidden variables:
int i = 0;
// HIDE: i
for(int j=0; j<=N; j++) {
if(elem[i]==null) { // Ошибка компиляции: использование запрещённой переменной.
}
}
// SHOW: i
i++; // Нет ошибки.
int i = 0;
using (CompilerUtils.HideVar(i))
{
for(int j=0; j<=N; j++){
if(elem[i]==null) { // Ошибка компиляции: использование запрещённой переменной
}
}
}
i++; // OK.
public static class CompilerUtils
{
public static IDisposable HideVar(params object[] vars)
{
return <пустая реализация IDisposable>;
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question