关键字 'this' 在静态 属性、静态方法或静态字段初始值设定项中无效
Keyword 'this' is not valid in a static property, static method, or static field initializer
public static void Main()
{
Stream s1 = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.sudhir.jpg");
Stream s2 = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.sunil.jpg");
Bitmap img1 = new Bitmap(s1);
Bitmap img2 = new Bitmap(s2);
if (img1.Size != img2.Size)
{
Console.Error.WriteLine("Images are of different sizes");
return;
}
float diff = 0;
for (int y = 0; y < img1.Height; y++)
{
for (int x = 0; x < img1.Width; x++)
{
diff += (float)Math.Abs(img1.GetPixel(x, y).R - img2.GetPixel(x, y).R) / 255;
diff += (float)Math.Abs(img1.GetPixel(x, y).G - img2.GetPixel(x, y).G) / 255;
diff += (float)Math.Abs(img1.GetPixel(x, y).B - img2.GetPixel(x, y).B) / 255;
}
}
Console.WriteLine("diff: {0} %", 100 * diff / (img1.Width * img1.Height * 3));
在这里,我试图匹配两张图片并找出它们的不同之处,但我收到了这个错误
Keyword 'this' is not valid in a static property, static method, or static field initializer.
出了什么问题,我该如何解决?
'this'只在对象上下文中有意义,不能用在静态代码中。如果在设置字段的起始值时需要引用'this',请在构造函数中设置该值。
错误消息会告诉您哪个文件的哪一行导致了问题。我认为这不是您向我们展示的任何台词。
关键字 this 仅在您使用对象(我的意思是实例)的情况下有效。当您使用静态方法时,这意味着您不处理特定对象而是处理 class 并且因此 "this" 不指向任何东西。
您的 main
方法是静态的,因此您不能调用 this.
相反,你可以写:
Stream s1 = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1.sudhir.jpg");
"this" 是一个不可见的参数,它指向 class 的当前实例。由于您将方法声明为静态的,因此您无法访问它。这不仅在 C# 中。 C++也有"this"。
public static void Main()
{
Stream s1 = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.sudhir.jpg");
Stream s2 = this.GetType().Assembly.GetManifestResourceStream("WindowsApplication1.sunil.jpg");
Bitmap img1 = new Bitmap(s1);
Bitmap img2 = new Bitmap(s2);
if (img1.Size != img2.Size)
{
Console.Error.WriteLine("Images are of different sizes");
return;
}
float diff = 0;
for (int y = 0; y < img1.Height; y++)
{
for (int x = 0; x < img1.Width; x++)
{
diff += (float)Math.Abs(img1.GetPixel(x, y).R - img2.GetPixel(x, y).R) / 255;
diff += (float)Math.Abs(img1.GetPixel(x, y).G - img2.GetPixel(x, y).G) / 255;
diff += (float)Math.Abs(img1.GetPixel(x, y).B - img2.GetPixel(x, y).B) / 255;
}
}
Console.WriteLine("diff: {0} %", 100 * diff / (img1.Width * img1.Height * 3));
在这里,我试图匹配两张图片并找出它们的不同之处,但我收到了这个错误
Keyword 'this' is not valid in a static property, static method, or static field initializer.
出了什么问题,我该如何解决?
'this'只在对象上下文中有意义,不能用在静态代码中。如果在设置字段的起始值时需要引用'this',请在构造函数中设置该值。
错误消息会告诉您哪个文件的哪一行导致了问题。我认为这不是您向我们展示的任何台词。
关键字 this 仅在您使用对象(我的意思是实例)的情况下有效。当您使用静态方法时,这意味着您不处理特定对象而是处理 class 并且因此 "this" 不指向任何东西。
您的 main
方法是静态的,因此您不能调用 this.
相反,你可以写:
Stream s1 = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsApplication1.sudhir.jpg");
"this" 是一个不可见的参数,它指向 class 的当前实例。由于您将方法声明为静态的,因此您无法访问它。这不仅在 C# 中。 C++也有"this"。