Необычное поведение в поставщиках типов

иметь провайдера типов с тремя свойствами 'a', 'b'и "с" типа "строка ','опция строки ' а также 'int option 'соответственно.

Когда у меня есть экземпляр с "", None и Some 1 в этих свойствах, это терпит неудачу:

(row1.a, row1.b, row1.c) |> should equal ("", None, Some 1)

Но все это прекрасно работает:

row1.a |> should equal ""

row1.b |> should equal None

row1.c |> should equal (Some 1)

("", None, Some 1) |> should equal ("", None, Some 1)

Как это возможно? Что может сделать None в b отличным от любого другого None? После компиляции None является просто нулем, могут ли два значения NULL отличаться в .Net?

Кортежи имеют структурное равенство, как и большинство типов F #, поэтому оно должно работать. Я получаю исключение NUnit.Framework.AssertionException с сообщением:

Expected: 
But was:  

NUnit просто вызывает .Equals, так чтогде проблема.

Это также не удается:

(row1.a, row1.b, row1.c).Equals(("", None, Some 1)) |> should equal true

Тип времени выполненияrow1 являетсяSystem.Tupleтак что даже это должно работать в теории:

row1 |> should equal ("", None, Some 1)

И на самом деле это происходит, когда естьнет нетNone в кортеже.

Я могу'Воспроизвести это поведение с кем-либо еще, кроме поставщиков типов.

Ответы на вопрос(1)

Ваш ответ на вопрос