Сохраненный вопрос - см. Редактировать внизу
Я работаю над небольшой функциональной библиотекой, в основном, чтобы обеспечить некоторую читаемость, скрывая основные цикломатические сложности. Поставщик называется Select<T>
(с вспомогательной фабрикой, называемой Select
), и использование аналогично
public Guid? GetPropertyId(...)
{
return Select
.Either(TryToGetTheId(...))
.Or(TrySomethingElseToGetTheId(...))
.Or(IGuessWeCanTryThisTooIfWeReallyHaveTo(...))
//etc.
;
}
и библиотека позаботится о коротком замыкании и т. Д. Я также добавил неявное преобразование из Select<T>
в T
, чтобы я мог написать
public Guid GetPropertyId(...)
{
ServiceResult result = Select
.Either(TryToGetTheId(...))
.Or(TrySomethingElseToGetTheId(...));
return result.Id;
}
Что я действительно хотел бы сделать, так это неявное преобразование в T без присваивания:
public Guid GetPropertyId(...)
{
return
//This is the part that I want to be implicitly cast to a ServiceResult
Select
.Either(TryToGetTheId(...))
.Or(TrySomethingElseToGetTheId(...))
//Then I want to access this property on the result of the cast
.Id;
}
Однако указанный синтаксис не работает - мне нужно либо присвоить его переменной, либо явно привести его. Есть ли способ получить неявное приведение inline?
EDIT
Что я хочу сделать, это:
class Foo {
public int Fuh { get; set; }
}
class Bar {
private Foo _foo;
public static implicit operator Foo (Bar bar)
{
return bar._foo;
}
}
//What I have to do
Foo bar = GetABar();
DoSomethingWith(bar.Fuh);
//What I want to do
DoSomethingWith(GetABar().Fuh);