聊城万拓网络科技-专业聊城网站建设、聊城网站制作、聊城网站优化、聊城做网站的品牌网站建设专家!

    您当前的位置是:首页 - 新闻动态 - 网站建设 » C#常见错误解决办法锦集

    C#常见错误解决办法锦集
     发布时间:2013-12-13  点击次数: 次   作者:万拓网络  来源:lcbaituo.com  Tags:

    C#常见错误解决办法锦集,以下“解决方案”中的内容对应的是“错误信息”中内容的解决方法。
    1. 编译器错误 CS0003

    ?? 错误信息
    内存不足。
    ?? 解决方案
    编译器无法分配足够的虚拟内存完成编译。关闭所有不必要的应用程序并重新编译。
    可能还需要增加页文件的大小,请确保有可用的磁盘空间。
    当 .NET Framework SDK 与 C# 编译器的版本不匹配时,或者当一个或多个支持 C# 编译器的文件损坏时,也可能出现此错误;请重新安装 Visual Studio。
    2. 编译器错误 CS0012
    ?? 错误信息
    类型“type”在未被引用的程序集中定义。必须添加对程序集“assembly”的引用。
    ?? 解决方案
    未找到引用类型的定义。如果所需的 .DLL 文件没有包括在编译中,则可能发生这种情况。
    下面的编译序列将导致 CS0012:
    // cs0012a.cs
    // compile with: /target:library
    public class A {}
    然后:
    // cs0012b.cs
    // compile with: /target:library /reference:cs0012a.dll
    public class B
    {
    public static A f()
    {
    C#从入门到精通
    2
    return new A();
    }
    }
    然后:
    // cs0012c.cs
    // compile with: /reference:cs0012b.dll
    class C
    {
    public static void Main()
    {
    object o = B.f(); // CS0012
    }
    }
    可以通过使用 /reference:b.dll;a.dll 进行编译来解决此 CS0012 错误。
    3. 编译器错误 CS0014
    ?? 错误信息
    无法找到所需的文件“file”。
    ?? 解决方案
    编译器需要某个文件,但它不在系统上。请确保路径是正确的。如果该文件是 Visual Studio 系统文件,那么您可能需要修复安装,或者移除并彻底重新安装 Visual Studio。
    4. 编译器错误 CS0015
    ?? 错误信息
    类型“type”的名称太长。
    ?? 解决方案
    用户定义类型的完全限定名必须少于或等于 2048 个字符。
    5. 编译器错误 CS0017
    ?? 错误信息
    程序“output file name”定义了不止一个入口点:function。


    3
    ?? 解决方案
    程序只能有一个 Main 方法。
    若要解决该错误,可以删除代码中的所有 Main 方法,只保留一个,或者可以使用/main 编译器选项指定要使用的 Main 方法。
    下面的示例生成 CS0017:
    // CS0017.cs
    public class clx
    {
    static public void Main()
    {
    }
    }
    public class cly
    {
    public static void Main() // CS0017, delete one Main or use /main
    {
    }
    }
    6. 编译器错误 CS0019
    ?? 错误信息
    运算符“operator”无法应用在“type”和“type”类型的操作数。
    ?? 解决方案
    二进制运算符所操作的数据类型是该运算符不能处理的数据类型。例如,不能对字符串使用 || 运算符。
    下面的示例生成 CS0019:
    // CS0019.cs
    public class MyClass
    {
    [System.Diagnostics.ConditionalAttribute("DEBUG" || "TRACE")] // CS0019
    // try the following line instead
    // [System.Diagnostics.ConditionalAttribute("DEBUG")]
    public void TestMethod()
    {
    C#从入门到精通
    4
    }
    public static void Main()
    {
    }
    }
    在本例中,必须在 ConditionalAttribute 外指定条件逻辑。只能向 ConditionalAttribute 传递一个预定义符号。
    7. 编译器错误 CS0020
    ?? 错误信息
    被常数零除。
    ?? 解决方案
    表达式在除法运算的分母中使用了字面(不是变量)值零。未定义被零除,因此无效。
    8. 编译器错误 CS0021
    ?? 错误信息
    无法将带 [] 的索引应用于“type”类型的表达式。
    ?? 解决方案
    试图通过索引器访问不支持 索引器(C# 编程指南) 的数据类型的值。
    当您试图在 C++ 程序集中使用索引器时,可能会遇到 CS0021。在这种情况下,请用DefaultMember 属性修饰 C++ 类,以使 C# 编译器知道哪个索引器是默认的。下面的示例生成 CS0021。
    此文件编译成一个 .dll 文件(DefaultMember 属性被注释掉)以生成此错误。
    // CPP0021.cpp
    // compile with: /clr /LD
    using namespace System::Reflection;
    // Uncomment the following line to resolve
    //[DefaultMember("myItem")]
    public ref class MyClassMC
    {
    public:
    property int myItem[int]
    {


    5
    int get(int i){ return 5; }
    void set(int i, int value) {}
    }
    };
    下面是调用此 .dll 文件的 C# 文件。此文件试图通过索引器访问该类,但由于没有成员被声明为要使用的默认索引器,所以生成错误。
    // CS0021.cs
    // compile with: /reference:CPP0021.dll
    public class MyClass
    {
    public static void Main()
    {
    MyClassMC myMC = new MyClassMC();
    int j = myMC[1]; // CS0021
    }
    }
    9. 编译器错误 CS0022
    ?? 错误信息
    [] 内索引数错误,应为“number”。
    ?? 解决方案
    数组访问操作在方括号内指定的维数不正确。
    10. 编译器错误 CS0026
    ?? 错误信息
    关键字“this”在静态属性、静态方法或静态字段初始值设定项中无效。
    ?? 解决方案
    this(C# 参考) 关键字引用的对象是类型的实例。由于静态方法不依赖于包含类的任何实例,因此“this”关键字无意义,而这是不允许的。
    下面的示例生成 CS0026:
    复制代码
    // CS0026.cs
    public class A
    C#从入门到精通
    6
    {
    public static int i = 0;
    public static void Main()
    {
    // CS0026
    this.i = this.i + 1;
    // Try the following line instead:
    // i = i + 1;
    }
    }
    11. 编译器错误 CS0027
    ?? 错误信息
    关键字“this”在当前上下文中不可用。
    ?? 解决方案
    在属性、方法或构造函数的外部发现了 this(C# 参考) 关键字。
    若要修复此错误,请修改语句以消除 this 关键字的使用,并且/或者将语句的一部分或全部移到属性、方法或构造函数的内部。
    12. 编译器错误 CS0029
    ?? 错误信息
    无法将类型“type”隐式转换为“type”。
    ?? 解决方案
    编译器要求显式转换。例如,可能需要将右值转换成与左值相同的类型。或者必须提供转换例程以支持某些运算符重载。
    在将某个类型的变量赋给其他类型的变量时必须进行转换。当在不同类型的变量之间进行赋值时,编译器必须将赋值运算符右边的类型转换为该赋值运算符左边的类型。假设有下面的代码:
    int i = 50;
    long lng = 100;
    i = lng;
    i = lng; 进行赋值运算,但赋值运算符左右两边变量的数据类型不匹配。进行赋值前,编译器将变量 lng(类型为 long)隐式转换为 int。此为隐式转换,原因是没有代码显式指示


    7
    编译器执行此转换。此代码的问题在于上述转换被视为收缩转换,而编译器不允许进行隐式收缩转换,原因是可能会丢失数据。
    如果转换后的数据类型所占用的内存存储空间比转换前的数据类型所占用的少,则存在收缩转换。例如,将 long 类型转换为 int 类型就被视为收缩转换。long 类型占用 8 个字节的内存,而 int 类型只占用 4 个字节。若要查看数据丢失如何发生,请考虑以下示例:
    int i = 50;
    long lng = 3147483647;
    i = lng;
    变量 lng 现在包含的值无法存储在变量 i 中,原因是该值太大。如果要将该值转换为int 类型,就会丢失一些数据,并且转换后的值不同于转换前的值。
    扩大转换与收缩转换相反。对于扩大转换,转换后的数据类型占用的内存存储空间比转换前的数据类型占用的多。下面是一个扩大转换的示例:
    int i = 50;
    long lng = 100;
    lng = i;
    请注意此代码示例和第一个示例之间的区别。这里,变量 lng 位于赋值运算符的左边,所以它是赋值的目标。在可以进行赋值前,编译器必须将变量 i(类型为 int)隐式转换为 long 类型,这是一个扩大转换,原因是从占用 4 个字节内存的类型 (int) 转换为占用 8 个字节内存的类型 (long)。由于不会发生数据丢失,所以允许进行隐式扩大转换。任何可以用 int 类型存储的值也可以用 long 类型存储。
    我们知道隐式收缩转换是不允许的,因此为了能够编译这些代码,就需要显式转换数据类型。显式转换是使用强制转换来完成的。强制转换是 C# 中用来描述将一种数据类型转换为另一种数据类型的术语。若要编译这些代码,我们需要使用以下语法:
    int i = 50;
    long lng = 100;
    i = (int) lng; // cast to int
    第三行代码通知编译器在进行赋值前,将变量 lng(类型为 long)显式转换为 int 类型。切记,使用收缩转换可能会丢失数据。使用收缩转换时应小心,而且即使可以编译代码,也可能会在运行时获得意外的结果。
    此讨论只针对值类型。使用值类型就是直接使用存储在变量中的数据。但 .NET Framework 还具有引用类型。使用引用类型就是使用对变量的引用,而不是使用实际数据。引用类型的示例是类、接口和数组。不能隐式或显式地将一个引用类型转换为其他引用类型,除非编译器允许特定的转换或可以实现相应的转换运算符。
    下面的示例生成 CS0029:
    C#从入门到精通
    8
    // CS0029.cs
    public class MyInt
    {
    private int x = 0;
    // Uncomment this conversion routine to resolve CS0029
    /*
    public static implicit operator int(MyInt i)
    {
    return i.x;
    }
    */
    public static void Main()
    {
    MyInt myInt = new MyInt();
    int i = myInt; // CS0029
    }
    }
    13. 编译器错误 CS0031
    ?? 错误信息
    常数值“value”无法转换为“type”。
    ?? 解决方案
    试图对类型不能存储值的变量赋值。
    14. 编译器错误 CS0034
    ?? 错误信息
    运算符“operator”对于“type1”和“type2”类型的操作数具有二义性。
    ?? 解决方案
    运算符用在了两个对象上,并且编译器找到多个转换。转换必须是唯一的,因此需要再进行一项类型转换,或者使其中一个转换成为显式的。


    9
    15. 编译器错误 CS0037
    ?? 错误信息
    无法将NULL转换成“type”,因为它是一个值类型。
    ?? 解决方案
    编译器不能给值类型赋空值,只能给引用类型或可为空值的类型赋空值。而 struct 是一个值类型。
    下面的示例生成 CS0037:
    // CS0037.cs
    public struct s
    {
    }
    class a
    {
    public static void Main()
    {
    int i = null; // CS0037
    s ss = null; // CS0037
    }
    }
    16. 编译器错误 CS0039
    ?? 错误信息
    无法通过内置转换将类型“type1”转换为“type2”。
    ?? 解决方案
    继承、引用转换和装箱转换允许使用 as(C# 参考) 运算符的转换。
    17. 编译器错误 CS0050
    ?? 错误信息
    可访问性不一致:返回类型“type”比方法“method”的可访问性低。
    C#从入门到精通
    10
    ?? 解决方案
    方法的返回类型和形参表中引用的每个类型都必须至少具有和方法自身相同的可访问性。
    18. 编译器错误 CS0051
    ?? 错误信息
    可访问性不一致:参数类型“type”比方法“method”的访问性低。
    ?? 解决方案
    方法的返回类型和形参表中引用的每个类型都必须至少具有和方法自身相同的可访问性。请确保方法签名中使用的类型不会因为省略 public 修饰符而意外变为专用。
    下面的示例生成 CS0051:
    // CS0051.cs
    public class A
    {
    // Try making B public since F is public
    // B is implicitly private here
    class B
    {
    }
    public static void F(B b) // CS0051
    {
    }
    public static void Main()
    {
    }
    }
    19. 编译器错误 CS0052
    ?? 错误信息
    可访问性不一致: 字段类型“type”比字段“field”的访问性低。
    ?? 解决方案
    字段类型的可访问性不能比字段本身的可访问性低,因为所有的公共构造都必须返回公


    11
    共的可访问对象。
    20. 编译器错误 CS0060
    ?? 错误信息
    可访问性不一致:基类“class1”比类“class2”的访问性低。
    ?? 解决方案
    基类和继承类之间的类可访问性应一致。
    下面的示例生成 CS0060:
    // CS0060.cs
    class MyClass
    // try the following line instead
    // public class MyClass
    {
    }
    public class MyClass2 : MyClass // CS0060
    {
    public static void Main()
    {
    }
    }
    21. 编译器错误 CS0061
    ?? 错误信息
    可访问性不一致:基接口“interface 1”比接口“interface 2”的可访问性低。
    ?? 解决方案
    公共构造必须返回可以公开访问的对象。
    在派生接口中,接口可访问性不能被限定。
    22. 编译器错误 CS0068
    ?? 错误信息
    “event”:接口中的事件不能有初始值设定项。
    C#从入门到精通
    12
    ?? 解决方案
    接口中的事件不能有初始值设定项。
    23. 编译器错误 CS0070
    ?? 错误信息
    事件“event”只能出现在 += 或 -= 的左边(从类型“type”中使用时除外)。
    ?? 解决方案
    在定义事件的类的外部,event 只能加上或减去引用。
    下面的示例生成 CS0070:
    // CS0070.cs
    using System;
    public delegate void EventHandler();
    public class A
    {
    public event EventHandler Click;
    public static void OnClick()
    {
    EventHandler eh;
    A a = new A();
    eh = a.Click;
    }
    public static void Main()
    {
    }
    }
    public class B
    {
    public int Foo ()
    {
    EventHandler eh = new EventHandler(A.OnClick);
    A a = new A();
    eh = a.Click; // CS0070
    // try the following line instead
    // a.Click += eh;
    return 1;


    13
    }
    }
    24. 编译器错误 CS0072
    ?? 错误信息
    “event”:无法重写;“method”不是事件。
    ?? 解决方案
    event 只能重写另一事件。
    25. 编译器错误 CS0075
    ?? 错误信息
    若要强制转换某个负值,必须将该值放在括号内。
    ?? 解决方案
    如果您使用标识预定义类型的关键字进行强制转换,则不需要括号。否则,必须用括号括起来,因为 (x) –y 不会被视为强制转换表达式。摘自 C# 规范的第 7.6.6 节:
    从消除歧义规则可以导出下述结论:如果 x 和 y 是标识符,则 (x)y、(x)(y) 和 (x)(-y) 是强制转换表达式,但 (x)-y 不是,即使 x 标识的是类型。但是,如果 x 是一个标识预定义类型(如 int)的关键字,则所有这四种形式均为强制转换表达式(因为这种关键字本身不可能是表达式)。
    26. 编译器错误 CS0076
    ?? 错误信息
    枚举名“value__”是保留字,无法使用。
    ?? 解决方案
    枚举中的项不能有称为 value__ 的标识符。
    27. 编译器错误 CS0081
    ?? 错误信息
    类型参数声明必须是标识符而不是类型。
    C#从入门到精通
    14
    ?? 解决方案
    当您声明泛型方法或类型时,请将类型参数指定为标识符,例如“T”或“inputType”。客户端代码在调用方法时会提供类型,以替换方法体或类体中标识符的每个匹配项。
    28. 编译器错误 CS0100
    ?? 错误信息
    参数名“parameter name”重复。
    ?? 解决方案
    方法声明多次使用了同一个参数名。参数名在方法声明中必须唯一。
    下面的示例生成 CS0100:
    // CS0100.cs
    namespace x

    分享到:
    上一篇:万拓网络-政府网站建设解决方案
    下一篇:超实用的PHP代码经典片段
     

    本站业务:聊城网站建设-聊城网站制作-聊城做网站