Я в процессе переноса моего кода C # в библиотеку F #.У меня есть следующие интерфейсы / классы в моей библиотеке C #:
public interface IMatch<out T> where T : IGame
{
IEnumerable<T> Games { get; }
}
public interface IGame
{
string Name { get; }
}
public class SoccerMatch : IMatch<SoccerGame>
{
public SoccerMatch(IEnumerable<SoccerGame> games)
{
Games = games;
}
public IEnumerable<SoccerGame> Games { get; }
}
public class SoccerGame : IGame
{
public SoccerGame(string name)
{
Name = name;
}
public string Name { get; }
}
Я попытался перенести это на F #, вот что я придумал:
type IGame =
abstract member Name: string with get
type IMatch<'T when 'T :> IGame> =
abstract member Games: IEnumerable<'T> with get
type SoccerGame =
{Name: string}
interface IGame with
member this.Name with get() = this.Name
type SoccerMatch =
{ Games: IEnumerable<SoccerGame>}
interface IMatch<SoccerGame> with
member this.Games: IEnumerable<SoccerGame> = this.Games
Проблема в том, что мне нужно вызвать эту библиотеку F # из моего приложения C #.Раньше, при использовании классов C #, я мог делать следующее:
var match= new SoccerMatch(new List<SoccerGame>());
IMatch<IGame> interfaceType = match;
Но когда я пытаюсь сделать то же самое с моей библиотекой F #, например:
var match = new SoccerMatch(new List<SoccerGame>());
IMatch<IGame> interfaceType = match;
, я получаюследующая ошибка: Ошибка CS0029 Невозможно неявно преобразовать тип 'FSharp.SoccerMatch' в 'FSharp.IMatch'
Я думаю, что что-то должно быть не так в моей реализации F # (очевидно), но что?