(与PropertyInfo SetValue和nulls相关)
如果我有public class Thing { public int X; },a Thing o和a FieldInfo fi指向该X字段,为什么打电话合法fi.SetValue(o, null)?运行时将字段X设置为零,即default(int)不是抱怨a ValueType不能设置为null.
有没有人知道这种行为背后的设计选择,至少从C#中违背了我最不惊讶的原则?
提示和指控比比皆是,使用NaN的算法在硬件FPU中可能"慢".特别是在现代的x64 FPU中,例如在Nehalem i7上,这仍然是真的吗?无论操作数的值如何,FPU乘法都会以相同的速度进行转换?
我有一些插值代码可以离开我们定义的数据的边缘,我正在尝试确定在那里和任何地方检查NaN(或其他一些哨兵值)是否更快,或者只是在方便的点.
是的,我将对我的特定情况进行基准测试(它可能完全由其他东西支配,比如内存带宽),但我很惊讶没有看到一个简洁的摘要来帮助我的直觉.
我将从CLR中做到这一点,如果它对生成的NaN的味道有所不同.
我想在它们运行之前报告它们,并且可以选择通过shell脚本运行单个测试而无需管理类别.我们有一些非托管代码可能会使进程处于错误状态,有时很高兴每个nunit-console运行时单独运行每个测试.
我希望能够使用静态方法从其他库扩展类型以启用泛型算法.以VectorN微软新推出的SIMD友好型固定尺寸类型为例.他们定义Zero,他们定义(+),他们定义(/),但我不能使用Array.average它们,因为他们没有定义DivideByInt,我很乐意:
open System.Numerics
type Vector2f with
static member DivideByInt (v:Vector2f) (i:int) = v / Vector2f(single i, single i)
let bigArray : Vector2f[] = readABigFile()
printf "the average is %A" (Array.average bigArray)
Run Code Online (Sandbox Code Playgroud)
但它不会让我编译,抱怨
error FS0001: The type 'Vector2f' does not support the operator 'DivideByInt'
Run Code Online (Sandbox Code Playgroud)
为什么F#编译器中存在此限制?
(编辑:基本上问过同样的问题.)