可以将C#编译器配置为在显式转换可能导致数据丢失时发出警告吗?

HBF*_*Fan 7 c# casting compiler-warnings

有没有办法配置VS2008 C#编译器为这样的代码发出警告:

Int64 x = 123456789000;
Int32 y = (Int32)x;
Run Code Online (Sandbox Code Playgroud)

ang*_*son 10

明确演员的重点是说"我对这个问题负责,请你去做."

在你无关紧要的情况下,编译器可能很容易发现该值不适合Int32,从而产生警告.

但是,这个怎么样:

Int64 x = CallSomeMethod();
Int32 y = (Int32)x;
Run Code Online (Sandbox Code Playgroud)

它怎么能警告你呢?应该是:

  1. 试着找出CallSomeMethod可以返回的值的范围是什么?
  2. 总是警告?(那么重点是什么?)

你可以期待的最好的是进行运行时检查,或者类似的,编译器不能阻止你出现可能出错的一切.


Eri*_*ert 5

所有必要的演员表都可能导致数据丢失.演员的目的是告诉编译器"我在这里做了一些你无法分析的危险,但我知道我在做什么".由于演员的整个目的是处理编译器不够智能分析的情况,期望编译器分析它以给出警告似乎毫无意义.

因此,你的提议实际上是对每一个必要的演员发出警告,这似乎适得其反.

我注意到隐式转换在某些极少数情况下也会导致数据丢失.隐式转换可能会失去一些精确度 ; 隐含的转换保留的是幅度.


Der*_*ley 0

转到项目的属性视图,单击“构建”选项卡,单击右下角的“高级”按钮,选中“检查算术溢出/下溢”复选框

  • 这将导致插入溢出检查代码,从而导致运行时异常,而不是编译时警告。 (2认同)