Можно ли переопределить Value в обнуляемой структуре, чтобы вернуть другой тип? - PullRequest
0 голосов
/ 10 апреля 2010

Это может показаться вам безумным, но мне нужно Nullable<T> (где T - это структура), чтобы вернуть другой тип для его свойства Value.

Правила: если свойство Nullable<T> HasValue имеет значение true, 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 Ответ

3 голосов
/ 10 апреля 2010

Вы ищете пользовательское неявное преобразование ? Если это так, вы можете определить его на Бобе:

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