2010-10-08 11 views
4

j'ai eu ce test:Opérateur de coercition C#?

[Fact] 
public void EverythingIsMappedJustFine(){ 
    new AutoMapperTask().Execute(); 
    Mapper.AssertConfigurationIsValid(); 
} 

Il jette un peu étrange exception:

Test 'Unit.Web.Bootstrap.AutoMapperFacts.EverythingIsMappedJustFine' a échoué:
System.InvalidOperationException: Aucun opérateur de coercition est défini
entre les types 'System.Void' et 'System.Object'.
à System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow (ExpressionType coercionType, expression d'expression, type convertToType)
...
à AutoMapper.DelegateFactory.CreateGet (méthode MethodInfo)

Malheureusement - Je ne pourrais pas » Reproduisez ceci à plus petite échelle et ne pouvez pas comprendre ce qui se passe exactement.

Qu'est-ce qu'un opérateur de coercition?


This pourrait être utile. Mais je n'arrive pas à extraire et à berner les bits d'information nécessaires.

+0

devrait être "conversion de type". – vulkanino

+3

@vulkanino qui n'aide pas beaucoup: / –

Répondre

5

Je ne sais toujours pas ce qu'est exactement l'opérateur de coercition, mais au moins - J'ai résolu mon problème raison trouvée.

Après un certain débogage automapper a pu reproduire le problème:

namespace mappertest 
{ 
    using AutoMapper; 
    using NUnit.Framework; 

    [TestFixture] 
    public class FooFacts 
    { 
     [Test] 
     public void MapToFizz() 
     { 
      Mapper.Initialize(c => c.AddProfile(new FooProfile())); 

      var foo = new Foo { Bar = "BarValue" }; 
      var fooModel = Mapper.Map<Foo, FooModel>(foo); 

      Assert.AreEqual("BarValue", fooModel.Bar); 
     } 
    } 

    public class FooProfile : Profile 
    { 
     protected override void Configure() 
     { 
      CreateMap<Foo, FooModel>(); 
     } 
    } 

    public class Foo 
    { 
     public string Bar { get; set; } 
     public void Fizz() { } 
    } 

    public class FooModel 
    { 
     public string Bar { get; set; } 
     public FizzModel Fizz { get; set; } 
    } 

    public class FizzModel { } 
} 

est très simple il se trouve - la source a la méthode qui est nommée comme propriété de destination.