您正在查看: C# 分类下的文章

编译器警告(等级 4)CS0109

错误消息成员“member”未隐藏继承成员。不需要关键字 new

类声明包括了 new 关键字,即使声明不重写基类中的现有声明。可以删除 new 关键字。

下面的示例生成 CS0109:

 复制代码
// CS0109.cs
// compile with: /W:4
namespace x
{
public class a
{
public int i;
}

public class b : a
{
public new int i;
public new int j;// CS0109
public static void Main()
{
}
}
}

编译器警告(等级 4)CS0402

错误消息“identifier”:入口点不能是泛型的或属于泛型类型

在泛型类型中找到入口点。若要移除此警告,请在非泛型类或结构中实现 Main。

 复制代码
// CS0402.cs
// compile with: /W:4
class C<T>
{
public static void Main()  // CS0402
{

}
}

class CMain
{
public static void Main() {}
}

编译器警告(等级 3)CS1702

错误消息假定程序集引用“Assembly Name #1”和“Assembly Name #2”匹配,您可能需要提供运行时策略

两个程序集引用有不同的内部版本号和/或修订号,所以它们不会自动统一。您可能需要在应用程序的 .config 文件中使用指令,以提供强制统一的运行时策略。

编译器警告(等级 3)CS1717

错误消息对同一变量进行赋值;您是要给其他变量赋值吗?

当您将一个变量分配给它自身时,例如 a = a,会出现此警告。

几个常见的错误可以生成此警告:

写入 a = a 作为 if 语句的条件,例如 if (a = a)。您的意思可能是 if (a == a)(这总为 true),所以您可以将其简要地写为 if (true)。

键入错误。您的意思可能是 a = b。

在一个参数和字段有相同名称的构造函数中,不要使用 this 关键字;您的意思可能是 this.a = a。

示例

下面的示例生成 CS1717。

 复制代码
// CS1717.cs
// compile with: /W:3
public class Test
{
public static void Main()
{
int x = 0;
x = x;// CS1717
}
}

编译器警告(等级 3)CS1718

错误消息对同一变量进行比较;您是要比较其他变量吗?

如果您是要比较其他变量,则您只需更正语句。

但另一种可能是您要测试真假值,并通过类似 if (a == a) (true) 或 if (a < a) (false) 这样的语句来完成此操作。最好简单地说成 if (true) 或 if (false)。这有两个原因:

它更简单;更清楚地表达您的意思。

它可以避免混淆:c# 2.0 的一个新特性就是可为 null 的值类型,这类似于 T-SQL(SQL Server 使用的编程语言)中的值 null。由于 T-SQL 中使用了三重逻辑,熟悉 T-SQL 的开发人员可能关心可为 null 的类型在类似 if (a == a) 这样的表达式上的效果。如果您使用 true 或 false,您就可以避免这类可能出现的混淆。

示例

下面的代码生成警告 CS1718。

 复制代码
// CS1718.cs
using System;
public class Tester 
{
 public static void Main() 
 { 
  int i = 0;
  if (i == i) { // CS1718.cs
  //if (true) { 
i++;
  }
 }
}