Danil
let enumValue = Enum.Value let intValue : int = LanguagePrimitives.EnumToValue enumValue, не работает ?
Vasily
Ну код немного сложнее
Vasily
Прямого типа enum нет в данном месте
Roman
Ну мне бы к инту
А чем простой каст к инту плох?
Vasily
|Shape.Enum s-> s.Accept { new IEnumVisitor<Convert<'T>> with member __.Visit<'t ,'u when 't : enum<'u> and 't : struct and 't :> ValueType and 't : (new : unit -> 't)>() = let printer= fun x-> let ts:'u = unbox<'t> x|>LanguagePrimitives.EnumToValue ts|>BsonValue let parser=fun(v:BsonValue)-> let res:'t=LanguagePrimitives.EnumOfValue (unbox<'u> v.AsInt32) res mkParser printer parser }
Vasily
Короче, проблема тут
Vasily
https://gist.github.com/vshapenko/8cd0c15d9e5c2f612da85b9d797d27fe
Vasily
Один пидор выпилил из LiteDb конструктор, принимающий obj
Vasily
в BSonValue
Vasily
Так же он выпилил RawValue
Vasily
И вот как быть с енамом в этом случае, решительно непонятно
Shub
Кто-то на http://dotnetfest.com/ идет?
https://www.facebook.com/events/foxminded/%D0%BC%D0%BE%D0%BB%D0%B8%D1%82%D0%B2%D0%B0-%D0%B7%D0%B0-%D1%87%D0%B8%D1%81%D1%82%D1%8B%D0%B9-%D0%BA%D0%BE%D0%B4/211200256144435/
Nikolay
Как понять, когда сокет отключился? (при корректном закрытии соединения) У меня выходит так, что после вызова Disconnect на клиенте, на сервере вызывается колбэк BeginReceive но количество переданных байт в EndReceive равно 0, а Socket.Connected равен true, но спустя какое-то время (секунд 10) становится false
Viacheslav
иерархия утилс модулей — вот и все, что у нас есть
давно пора открывать фонд цитат f# dlood
Nikolay
Там же всё равно ивент есть какой-то
Vladimir
это все те же Socket.Unofficial, можешь в исходниках глянуть https://github.com/mgravell/Pipelines.Sockets.Unofficial/blob/master/src/Pipelines.Sockets.Unofficial/SocketConnection.Receive.cs
Nikolay
if (bytesReceived <= 0) { _receiveFromSocket.Writer.Advance(0); TrySetShutdown(PipeShutdownKind.ReadEndOfStream); break; } Судя по всему так 🤔
Romɑn
type SomeEnum = Value1 = 10 | Value2 = 20 SomeEnum.Value1.ToString() -> "Value1" SomeEnum.Value1.GetHashCode() -> 10
GetHashCode модет поменяться в зависимости от реализации метода, на разных рантаймах может быть разное значение хэшкода для одного и того же значения из которого считается хэшкод
Vladimir
Using GetHashCode() is incorrect. You should cast to int. Using it the way you do is asking for raptors(or Raymond) to come and eat you.
habib
))) согласен
Vasily
Блеать
Vasily
Как же провернуть этот трюк???
Vasily
Какой надо навесить констрейнт на тип 't , чтобы можно было написать int t?
Danil
<'T when 'T: struct and 'T: (new: unit -> 'T) and 'T :> ValueType>
Vasily
Так оно не работает
Vasily
К сожалению
Vladimir
поищи исходники функции int
Vasily
Осталось понять, как их найти
Vasily
Ну и по факту задача сводится к
Vasily
't->int, int->'t
Vasily
Какие надо навесить констрейнты, шоб оно , сука, завелось?
Vladimir
Осталось понять, как их найти
где-то в недрах фшарп репы)
Vasily
где-то в недрах фшарп репы)
НУ СПАСИБО, БЛЕАТЬ, КАРТИНКА С МУЖИКОМ В КАНАЛИЗАЦИОННОМ ЛЮКЕ ЖИПЕГ
Vladimir
Vasily
Оно, да
Vasily
Пора саммонить боевых башкиров
Vasily
@omgszer
Ayrat
@omgszer
А я не понял что надо
Ayrat
Можешь носом ткнуть в вопрос
Vasily
Есть enum<'t>
Vasily
Что надо написать на
Vasily
't
Vasily
чтобы можно было кастить его в инт и обратно?
Vasily
Один пидор , автор LiteDb, просто поменял сигнатуру своего BSonValue
Vasily
С ЦЕЛЬЮ УСИЛЕНИЯ ТИПИЗАЦИИ
Vasily
И сломал рабочий сценарий к хуям
Vasily
Раньше было как
Vasily
obj кладешь
Vasily
obj берешь
Vasily
Теперь хуй
Vasily
Теперь надо к одному из типов приводить
Vasily
А вот как это сделать, хз
Ayrat
То констрейн на оп_експлисит
Vladimir
а кстати если там будет enum<long> то не поломает твой каст к инту все?
Vasily
Но получается, что надо два констрейнта?
Vladimir
не, я про то что мало ли для чего Василий этот каст делает) получит просто неправильное значение если что
Vasily
Я пытаюсь enum пихнуть в BsonValue
Vasily
Только и всего
Vladimir
ну если кастанешь лонг к инту то не то пиханешь)
Vasily
Хорошо
Vasily
Все кастим к инт64
Ayrat
Не чураюсь
let inline foo<'a, 'b when 'a: enum<'b> and 'b: (static member op_Explicit: 'b -> int32)> (x: 'a) = failwith ""
Ayrat
я ниибу что ты затеял
Ayrat
но в дотнете это достаточно бесполезно
Ayrat
в енумах пока что только числа могут быть
Vasily
Да ничего я не затеял
Vasily
Я, блеать, хочу попробовать завести свой проект с LiteDb 5
Ayrat
так и что тебе надо? скастить к инту и получить инт?
Vasily
Угу
Vasily
При условии, что на входе enum<'u>
Vasily
Точнее, там констрейнт
Vasily
when 't : enum<'u>
Ayrat
Угу
let inline foo x = (# "conv.i4" x : int32 #)
Ayrat
ебашь