Maybe.cs
我使用自定义解决方案有以下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FluentAssertions;
namespace FunctionalExtensions.Specs
{
[Microsoft.VisualStudio.TestTools.UnitTesting.TestClass]
public class TestMaybe
{
class Base { }
class A : Base { }
class B : Base { }
[Microsoft.VisualStudio.TestTools.UnitTesting.TestMethod]
public void TestCovariance()
{
A a = new A();
Maybe<A> ma = a.ToMaybe();
Maybe<A> maa;
Base b = a;
Maybe<Base> mb = ma;
Maybe<Base> mbb = b.ToMaybe();
// This works
(mb is Some<A>).Should().BeTrue ();
maa = (Some<A>)(mb as object);
// This doesn't
(mbb is Some<A>).Should().BeTrue ();
maa = (Some<A>)(mbb as object);
}
}
}
该Maybe.cs
实现位于Maybe Implementation in C# — Gist中,粘贴到问题中有点长。基本上,我有一个实例
object
我需要在运行时检测是否可以将其转换为
Some<A>
但是请注意,我认为这需要隐式转换才能工作。我的猜测是,我无法从接口(c# 标准的一部分)定义隐式转换,而 Some 是一个接口。有些必须是使其协变的接口(C# 标准的另一部分)
关于如何克服这个问题的任何猜测还是我完全被困住了?