C#编译器是否可以配置为在显式强制转换可能导致数据丢失时发出警告?
有没有一种方法可以配置VS2008 C#编译器来对以下代码发出警告:C#编译器是否可以配置为在显式强制转换可能导致数据丢失时发出警告?,c#,casting,compiler-warnings,C#,Casting,Compiler Warnings,有没有一种方法可以配置VS2008 C#编译器来对以下代码发出警告: Int64 x = 123456789000; Int32 y = (Int32)x; Int64 x = 123456789000; Int32 y = x; 转到项目的“属性”视图,单击“构建”选项卡,单击右下角的“高级”按钮,选中“检查算术溢出/下溢”复选框编译器无法在编译时执行此操作,但您可以将其配置为在运行时抛出例外 在projectproperties->Build->Advanced->checkoverfl
Int64 x = 123456789000;
Int32 y = (Int32)x;
Int64 x = 123456789000;
Int32 y = x;
转到项目的“属性”视图,单击“构建”选项卡,单击右下角的“高级”按钮,选中“检查算术溢出/下溢”复选框编译器无法在编译时执行此操作,但您可以将其配置为在运行时抛出例外
在projectproperties->Build->Advanced->checkoverflow\underflow中,显式强制转换的全部要点是说“我对这个问题负责,请去做。” 在您的小例子中,编译器可能很容易发现该值不适合Int32,从而产生您的警告 然而,这又如何呢:
Int64 x = CallSomeMethod();
Int32 y = (Int32)x;
它怎么能警告你呢?如果它:
Int64 x = 123456789000;
Int32 y = (Int32)x;
Int64 x = 123456789000;
Int32 y = x;
在编写代码时,必须使用显式强制转换警告这一事实难道还不够吗?显式转换通常告诉编译器“嘿,我知道我在做什么。”我们有一些代码正在执行一些导致数据丢失的显式转换。我们需要把它清理干净。我希望我们可以设置一个编译器选项来帮助我们找到这些案例。C++对此有警告;我认为c#可能有问题。这将导致插入溢出检查代码,从而导致运行时异常,而不是编译时警告。