2010-04-09 52 views
0

這可能聽起來很瘋狂,但我需要一個Nullable<T>(其中T是一個結構體)爲其Value屬性返回一個不同的類型。是否有可能重寫可空結構的值,以返回一個不同的類型?

規則如果Nullable<T>的屬性HasValue爲true,則值將始終返回不同指定類型的對象(然後自身)。

我可能在思考這一點,但波紋管樣的這個單元測試顯示了我想做的事情。

public struct Bob 
    { 
      ... 
    } 


    [TestClass] 
    public class BobTest 
    { 
      [TestMethod] 
      public void Test_Nullable_Bob_Returns_Joe() 
      { 
        Joe joe = null; 
        Bob? bob; 
        var bobHasValue = bob.HasValue; // returns if Bob is null 

        if(bobHasValue) 
          joe = bob.Value; //Bob returns a Joe 
      } 
    } 
+2

它絕對顯示你想要做什麼,但是...爲什麼?那麼你的鮑勃如何知道喬要回歸什麼? – 2010-04-09 20:53:29

+0

我會在重載屬性中寫入邏輯,或者不是。 – Andrew 2010-04-12 14:29:15

回答

3

你找一個user-defined implicit conversion如果是這樣,你可以在鮑勃定義一個:

class Bob { 
    static public implicit operator Joe(Bob theBob) { 
     // return whatever here... 
    } 
} 

如果你不能做到這一點,因爲你沒有權限更改Bob你總是可以考慮寫一個擴展方法:

public static class BobExt { 
    public static Joe ToJoe(this Bob theBob) { 
     return whatever; // your logic here... 
    } 
} 

if(bobHasValue) 
    joe = bob.Value.ToJoe(); // Bob converted to a Joe 
+0

不錯的一個!你不想要一個「隱式」嗎? – Kobi 2010-04-09 20:56:38

+0

@Kobi:哈哈。我需要削減咖啡。是的,謝謝 - 我修正了我的例子。 – LBushkin 2010-04-09 20:57:39

+0

如果我沒有記錯,轉換運算符不需要在類中定義。 – 2010-04-09 21:00:29

相關問題