如何满足编译器消除警告0052?

Mas*_*low 8 f# compiler-warnings

我希望满足编译器警告级别5.所以我在一个文件中有32个警告FS0052 已复制该值以确保此操作不会改变原始值

我已经关注了似乎与此警告相关的唯一SO帖子,但由于我的类型是由Microsoft生成的类型提供程序,因此我不能只是将字段标记为可变以安静警告.加上一些实际上不应该变异的可变东西看起来像是黑客而不是修复.

例子:

  1. 可空 .GetValueOrDefault()
  2. 可空 .ToString()
  3. GUID .toString()
  4. 我相信任何类型的struct方法调用

从正确的功能角度处理此警告的建议方法是什么?

Rux*_*uxo 5

不知道您是否仍然感兴趣。

在我看来,当不确定方法调用是否会破坏原始实例的状态时,编译器会发出警告(这主要应来自F#以外的任何库)。

就我而言,将值显式复制到变量中通常可以减轻警告。例如:

open System

// generate the warning due to "ToString()"
let DirSeparator = Path.DirectorySeparatorChar.ToString()  

// no warning
let ExplicitCopy = let x = Path.DirectorySeparatorChar in x.ToString()  

let Alternative = sprintf "%c" Path.DirectorySeparatorChar
Run Code Online (Sandbox Code Playgroud)