HI!
Вот мой случай: у меня есть некоторый тип значения, который упакован в другой тип с соответствующими неявными конвертерами. Если я приведу обернутый тип к объекту, а затем попытаюсь получить исходное значение, я могу сделать это только в два этапа.
Если упростить мой код выглядит следующим образом:
public enum MyEnum : int
{
First,
Second
}
public class Test<T>
{
public Test(T val)
{
Value = val;
}
private T Value { get; set; }
public static implicit operator T(Test<T> m)
{
return m.Value;
}
public static implicit operator Test<T>(T m)
{
var res = new Test<T>(m);
return res;
}
}
static void Main()
{
object res = new Test<MyEnum>(MyEnum.First);
Console.WriteLine((MyEnum)(Test<MyEnum>)res);
Console.WriteLine((MyEnum)res);
}
Первый «Console.WriteLine» работает нормально. Второй сбой.
Есть ли способ изменить это поведение и заставить его работать без двойного приведения?
ОБНОВЛЕНИЕ 1
Я должен использовать объект для приведения значения (в реальном приложении мне нужно привести свойство ComboBox.SelectedItem, и я не хочу добавлять дополнительное свойство в ComboBox, потому что мне придется везде менять свой код взаимодействия с пользовательским интерфейсом).
ОБНОВЛЕНИЕ 2
Неявные преобразования в и из System.Object не допускаются.
ОБНОВЛЕНИЕ 3
Обновлен мой пример кода, чтобы отразить всю проблему.