viceversa para kelvin grados farenheit fahrenheit ejemplos convertir centígrados centigrados celsius c# f#

para - ¿Hay un equivalente a crear un operador implícito de C#en F#?



grados celsius a fahrenheit c# (3)

En C # puedo agregar operadores implícitos a una clase de la siguiente manera:

public class MyClass { private int data; public static implicit operator MyClass(int i) { return new MyClass { data = i }; } public static implicit operator MyClass(string s) { int result; if (int.TryParse(s, out result)) { return new MyClass { data = result }; } else { return new MyClass { data = 999 }; } } public override string ToString() { return data.ToString(); } }

Luego puedo pasar cualquier función que esté esperando que un objeto MyClass sea una cadena o un int. p.ej

public static string Get(MyClass c) { return c.ToString(); } static void Main(string[] args) { string s1 = Get(21); string s2 = Get("hello"); string s3 = Get("23"); }

¿Hay alguna manera de hacer esto en F #?


Como han señalado otros, no hay manera de hacer una conversión implícita en F #. Sin embargo, siempre puede crear su propio operador para facilitar la conversión explícita de las cosas (y reutilizar las definiciones op_Implicit que las clases existentes han definido):

let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)

Entonces puedes usarlo así:

type A() = class end type B() = static member op_Implicit(a:A) = B() let myfn (b : B) = "result" (* apply the implicit conversion to an A using our operator, then call the function *) myfn (!> A())


La conversión implícita es bastante problemática con respecto a la seguridad de tipo y la inferencia de tipo, por lo que la respuesta es: No, en realidad sería una característica problemática.


No no hay.