在C#我可以添加隱含的運營商的一類,如下所示:是否有相當於在F#中創建C#隱式運算符?
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();
}
}
然後我可以傳遞期待一個MyClass的對象的字符串或int任何功能。 如
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");
}
是否有F#這樣的方式?
這似乎是F#2.0中的無效前綴運算符名稱。運營商名稱的規則是否定義在某個地方?我沒有在[MSDN](http://msdn.microsoft.com/zh-cn/library/dd233204.aspx)頁面上看到任何指示此限制的內容。 – Daniel 2011-02-17 20:08:26
從名稱中省略'〜'似乎有效。規則改變了嗎? – Daniel 2011-02-17 20:18:06
@丹尼爾 - 是的,我認爲規則必須改變。省略'〜'不會起作用,因爲它會使它成爲中綴而不是前綴運算符。但是,用'!'替換'〜'應該可以。 – kvb 2011-02-17 21:58:04