2016-06-11 1 views
1

J'essaie d'obtenir un générateur C# FsCheck pour générer une série de commandes qui sont initialisées avec des chaînes aléatoires. Je suis venu avec la solution suivante:C# FsCheck ne peut pas convertir l'expression lambda

public Gen<Command<A,B>> Next(B value) 
{ 
    var gen1 = Arb.Default.String().Generator; 
    var gen2 = Gen.two(gen1); 
    var gen3 = gen2.select((Command<A,B>)(s => new DerivedCommand(s.Item1,s.Item2))) 
    //DerivedCommand extends Command<A,B> 

    return Gen.OneOf(gen3); 
} 

Cependant, VS ne peut pas construire ce code:

Cannot convert lambda expression to type Command<A,B> because it is not a delegate type 

Je recherche des solutions ce message d'erreur, mais rien que j'ai trouvé aidé. J'utilise System.Linq et System.Data.Entity. Toutes les suggestions pour résoudre ce problème sont très appréciées.

Répondre

1

Vous essayez de lancer (s => new DerivedCommand(s.Item1,s.Item2)), qui est une expression lambda, à (Command<A,B>), ce qui (je suppose) est une classe.

Vous devez probablement quelque chose comme:

var gen3 = gen2.select(s => (Command<A,B>)(new DerivedCommand(s.Item1,s.Item2)));