C# CS1023嵌入语句不能是声明或标记语句

C# CS1023嵌入语句不能是声明或标记语句,c#,C#,我有一个能正常工作的程序。这是一个正确的代码 public static double Smth(int x, int y, double[,] original, int lengthX, int lengthY) { var pixelsFields = new List<double>(); double median; for (int areasX = -1; areasX < 2

我有一个能正常工作的程序。这是一个正确的代码

public static double Smth(int x, int y, double[,] original, int lengthX, int lengthY)
        {
            var pixelsFields = new List<double>();
            double median;
            for (int areasX = -1; areasX < 2; areasX++)
                for (int areasY = -1; areasY < 2; areasY++)
                    if ((x + areasX > -1) && (y + areasY > -1) && (x + areasX < lengthX) && (y + areasY < lengthY))
                        pixelsFields.Add(original[x + areasX, y + areasY]);
但是,我想改进我的代码。表达式x+areasX和y+areasY经常重复,所以我决定创建两个变量。不幸的是,我在新变量上有一个错误:错误CS1023:嵌入语句不能是声明或标记语句

public static double Smth(int x, int y, double[,] original, int lengthX, int lengthY)
            {
                var pixelsFields = new List<double>();
                double median;
                for (int areasX = -1; areasX < 2; areasX++)
                    for (int areasY = -1; areasY < 2; areasY++)
                        var diffX = x + areasX;
                        var diffY = y + areasY;
                        if ((diffX > -1) && (diffY > -1) && (diffX < lengthX) && (diffY < lengthY))
                            pixelsFields.Add(original[diffX, diffY]);

你能帮我纠正一下吗

for循环后缺少大括号

 public static double Smth(int x, int y, double[,] original, int lengthX, int lengthY)
   {
        var pixelsFields = new List<double>();
        double median;
        for (int areasX = -1; areasX < 2; areasX++)
            for (int areasY = -1; areasY < 2; areasY++)
            {
                var diffX = x + areasX;
                var diffY = y + areasY;
                if ((diffX > -1) && (diffY > -1) && (diffX < lengthX) && (diffY < lengthY))
                    pixelsFields.Add(original[diffX, diffY]);
            }
在C语言中,像if和for这样的构造只捕获下一个语句,而不考虑空格。当你写作时:

var pixelsFields = new List<double>();
double median;
for (int areasX = -1; areasX < 2; areasX++)
    for (int areasY = -1; areasY < 2; areasY++)
        var diffX = x + areasX;
        var diffY = y + areasY;
        if ((diffX > -1) && (diffY > -1) && (diffX < lengthX) && (diffY < lengthY))
            pixelsFields.Add(original[diffX, diffY]);
大多数样式指南要求您像这样使用大括号。如果不这样做,则在添加另一条语句时,可能会意外导致循环中的语句不再位于该循环中,如本例所示


至于您具体遇到的错误,您的内部for循环只有一条语句:var diffX=x+areasX;。由于此单个语句是变量声明而产生。语言禁止这样做,可能是为了避免我提到的问题,也可能是因为这样一个变量的作用域在语法上不明确,是立即结束,还是到下一个}。

尝试声明var diffX和diffY,在其中删除pxelsfields。您需要大括号来表示for循环的作用域。不建议使用大括号来表示范围。它可能会让人困惑,并导致此类错误
var pixelsFields = new List<double>();
double median;
for (int areasX = -1; areasX < 2; areasX++)
    for (int areasY = -1; areasY < 2; areasY++)
        var diffX = x + areasX;
var diffY = y + areasY;
if ((diffX > -1) && (diffY > -1) && (diffX < lengthX) && (diffY < lengthY))
    pixelsFields.Add(original[diffX, diffY]);
var pixelsFields = new List<double>();
double median;
for (int areasX = -1; areasX < 2; areasX++)
{
    for (int areasY = -1; areasY < 2; areasY++)
    {
        var diffX = x + areasX;
        var diffY = y + areasY;
        if ((diffX > -1) && (diffY > -1) && (diffX < lengthX) && (diffY < lengthY))
        {
            pixelsFields.Add(original[diffX, diffY]);
        }
    }
}