• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

168
Views
Implementar correctamente la unidad F# en C#

Esta pregunta no se trata de compatibilidad con C#/F# como en esta .

Me gustaría saber la forma correcta de implementar un tipo como F# Unit en lugar de usar void .

Obviamente descartaré este resultado y no expondré este tipo al mundo exterior.

Me pregunto si una clase vacía podría hacerse pasar por este rol.

 internal class Unit { }

Por ejemplo, en la biblioteca language-ext , el autor usó una struct .

¿Hay algún beneficio en esta elección?

about 3 years ago · Santiago Trujillo
3 answers
Answer question

0

No estoy seguro de cuál es la mejor manera de definir la Unit para su uso desde C#. Puede diferir de cómo se hace esto en F# (porque en F#, el compilador oculta el uso de alguna manera).

Sin embargo, puede encontrar la implementación de la unit F# en la biblioteca central:

  • La interfaz pública se define en prim-types.fsi
  • La implementación se proporciona en prim-types.fs

Estos son los puntos clave sobre la implementación de la unit F#

  • Implementa GetHashCode y Equals de la misma forma que la versión Rx
  • Es IComparable y todos los valores del tipo de unit son iguales
  • Lo más importante es que tiene un constructor privado, por lo que no puede crear un nuevo valor de unit . Tampoco tiene una instancia predeterminada (a diferencia de la unidad Rx) y, por lo tanto, en F#, todos los valores de la unidad se representan en realidad como null . Sin embargo, el lenguaje/compilador generalmente oculta este hecho.

Entonces, parece que la única diferencia en F# es que usa el valor null . Si desea usar la unit explícitamente, esta podría no ser la mejor opción. Sin embargo, si tiene Unit.Default , finalmente está definiendo un tipo con dos valores posibles, porque puede ser Unit.Default o null (¡y por lo tanto no es realmente una unidad!)

about 3 years ago · Santiago Trujillo Report

0

System.ValueTuple (sin argumento genérico) es una gran unidad en C#. El código fuente está abierto.

about 3 years ago · Santiago Trujillo Report

0

He usado este tipo de Unidad como referencia: https://github.com/louthy/language-ext/blob/main/LanguageExt.Core/DataTypes/Unit/Unit.cs

Viniendo de una biblioteca de extensión funcional.

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error