2010-10-08 46 views
4

我得到這個測試:C#強制操作符?

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

它拋出一個有點奇怪的例外:

測試 'Unit.Web.Bootstrap.AutoMapperFacts.EverythingIsMappedJustFine' 失敗:
System.InvalidOperationException:沒有強制經營者在類型'System.Void'和'System.Object'之間定義爲

在System.Linq.Expressions.Expression.GetUserDefinedCoercionOrThrow(ExpressionType coercionType,表達式表達,類型convertToType)
...
在AutoMapper.DelegateFactory.CreateGet(MethodInfo的方法)

不幸的是 - 我不能」在較小的範圍內再現這一點,並且無法弄清楚究竟發生了什麼。

什麼是強制操作符?


This可能是有用的。但我沒有提取和貶低必要的信息位。

+0

應該是「類型轉換」。 – vulkanino 2010-10-08 14:18:34

+3

@vulkanino沒有太大的幫助:/ – 2010-10-08 14:25:50

回答

5

我仍然不知道什麼是強制操作符,但至少 - 我解決了我的問題 找到原因。

一些automapper調試後能夠重現問題:

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 { } 
} 

很簡單,因爲它證明 - 源都有名爲就像目的地屬性方法。