En C# que puede agregar operadores implícitos a una clase de la siguiente manera:¿Existe un equivalente para crear un operador implícito de C# en F #?
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();
}
}
Entonces puede pasar cualquier función que se espera un objeto MiClase una cadena o un int. por ejemplo
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 una manera de hacer esto en C#?
Esto parece ser un nombre de operador de prefijo no válido en F # 2.0. ¿Las reglas para los nombres de los operadores están definidas en alguna parte? No veo nada en la página [MSDN] (http://msdn.microsoft.com/en-us/library/dd233204.aspx) que indique esta restricción. – Daniel
Omitir '~' del nombre parece funcionar. ¿Las reglas cambiaron? – Daniel
@Daniel - sí, creo que las reglas deben haber cambiado. Omitir el '~' no funcionará del todo porque lo convertirá en un infijo en lugar de un operador de prefijo. Sin embargo, reemplazar '~' con '!' Debería funcionar. – kvb