是否可以覆盖可为空的结构上的Value,以返回不同的类型?

时间:2010-04-09 20:47:30

标签: c# struct nullable

这对你来说可能听起来很疯狂,但是我需要一个Nullable<T>(其中T是一个结构)来为它的Value属性返回一个不同的类型。

规则是Nullable<T>的属性HasValue为真,Value将始终返回不同指定类型的对象(然后是其自身)。

我可能会想到这一点,但是这个单元测试显示了我想要做的事情。

    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
            }
    }

1 个答案:

答案 0 :(得分:3)

您是否在寻找user-defined implicit conversion如果是,您可以在Bob上定义一个:

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