2011-06-01 21 views
6
class Person 
{ 
    string Name; 
    int Age; 
} 

我希望能夠將一個字符串轉換爲個人隱象下面超載/對「爲」

var mrFoo = "Foo" as Person; 

我知道我可以通過定義隱式轉換,請執行下列操作隱含操作

Person mrFoo = "Foo"; 

但我具體使用「as」運算符

+1

您可以定義顯式轉換運算符重載,並使用顯式類型'(Person)'而不是'as'運算符。 – 2011-06-01 16:01:23

回答

20

不,你不能這樣做。 「as」運算符從不使用用戶定義的轉換 - 僅引用轉換和拆箱轉換。基本上,有關的參考文獻必須是正確的類型。

就個人而言,我會強烈建議你遠離轉換操作符(尤其是隱式的),絕大多數情況下。通常具有轉換方法更清楚,例如, Person.FromString(...)

+3

+1不做 – SLaks 2011-06-01 16:01:48

4

無需使用as操作,因爲你可以做到這一點與implicit操作:http://msdn.microsoft.com/en-us/library/z5z9kes2(v=vs.71).aspx

東西沿着這些路線應該工作:

public static implicit operator Person(string s) 
{ 
    Person p = new Person() {Name = s}; 
    return p; 
} 

現在,你可以簡單地做:

Person p = "John Doe"; 
+0

那麼,您究竟能夠在密封系統類型中過載操作員?很確定你不能這樣做。 – 2013-09-10 04:25:39

6

你有沒有考慮過使用參數化構造函數?

var mrFoo = new Person(「Foo」);

+2

這是最明智的做法。 – daniel1426 2014-01-15 05:40:10