g lng = 100; i = (int) lng; // cast to int
第三行代码通知编译器在进行赋值前, 将变量 lng (类型为 long) 显式转换为 int 类型。 切记,使用收缩转换可能会丢失数据。使用收缩转换时应小心,而且即使可以编译代码,也 可能会在运行时获得意外的结果。 此讨论只针对值类型。使用值类型就是直接使用存储在变量中的数据。但 .NET Framework 还具有引用类型。使用引用类型就是使用对变量的引用,而不是使用实际数据。 引用类型的示例是类、 接口和数组。 不能隐式或显式地将一个引用类型转换为其他引用类型, 除非编译器允许特定的转换或可以实现相应的转换运算符。 下面的示例生成 CS0029: // 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; } */ 7
ASP.NETT从入门到精通
public static void Main() { MyInt myInt = new MyInt(); int i = myInt; // CS0029 } } 13. 编译器错误 CS0031 错误信息 常数值“value”无法转换为“type”。 解决方案 试图对类型不能存储值的变量赋值。 14. 编译器错误 CS0035 错误信息 运算符“operator”对于“type”类型的操作数具有二义性。 解决方案
编译器有多个可用的转换,但在应用运算符之前不知道选择哪个转换。
// CS0035.cs class MyClass { private int i; public MyClass(int i) { this.i = i; } public static implicit operator double(MyClass x) { return (double) x.i; }
8
扫雷英雄榜——ASP.NET常见错误及解决方案 王牌8
public static implicit operator decimal(MyClass x) { return (decimal) x.i; } } class MyClass2 { static void Main() { MyClass x = new MyClass(7); object o = - x; // try a cast: // object o = - (double)x; } } 15. 编译器错误 CS0037 错误信息 无法将 NULL 转换成“type”,因为它是一个值类型。 解决方案 // CS0035
编译器不能给值类型赋空值,只能给引用类型或可为空值的类型赋空值。而 struct 是一 个值类型。 下面的示例生成 CS0037: // CS0037.cs public struct s { } class a { public static void Main() { int i = null; s ss = null; } 9
// CS0037 // CS0037
ASP.NETT从入门到精通
} 16. 编译器错误 CS0039 错误信息 无法通过内置转换将类型“type1”转换为“type2”。 解决方案 继承、引用转换和装箱转换允许使用 as(C# 参考) 运算符的转换。 17. 编译器错误 CS0025 错误信息 未能找到标准库文件“file”。 解决方案
未找到编译器所需的文件。请检查路径是否正确以及文件是否存在。 如果文件是 Visual Studio 系统文件,您可能需要修复 Visual Studio 安装,或者完全重 新安装它。 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 { } 10
扫雷英雄榜——ASP.NET常见错误及解决方案 王牌8
public static void F(B b) { } public static void Main() { } } 19. 编译器错误 CS0052 错误信息
// CS0051
可访问性不一致: 字段类型“type”比字段“field”的访问性低。 解决方案
字段类型的可访问性不能比字段本身的可访问性低,因为所有的公共构造都必须返回公 共的可访问对象。 20. 编译器错误 CS0060 错误信息 可访问性不一致:基类“class1”比类“class2”的访问性低。 解决方案 基类和继承类之间的类可访问性应一致。 下面的示例生成 CS0060: // CS0060.cs class MyClass // try the following line instead // public class MyClass { } public class MyClass2 : MyClass { public st