从C#调用时C#类方法确实起作用,但从VB.Net调用时则不起作用

比约恩盒子开始

我有以下用C#创建的实用程序类。

public class ObjectMapper<TSource, TTarget>
{
    private Collection<Action<TSource, TTarget>> _mappings =
                    new Collection<Action<TSource, TTarget>>();


    public void AddMapping(Action<TSource, TTarget> action)
    {
        _mappings.Add(action);
    }

    public void ApplyMappings(TSource source, TTarget target)
    {
        foreach (var mapping in _mappings)
        {
            mapping(source, target);
        }
    }
}

我可以使用此类将属性从一个对象复制到另一个对象。我知道还有其他替代方案,例如AutoMapper,但这不属于我的问题范围。

当我从C#项目中使用此类时,一切正常。单元测试通过等。以下是C#中此类的用法示例(对荷兰命名表示歉意)。

        // Arrange
        // initialiseer auteur
        Auteur auteur = new Auteur
        {
            Achternaam = "Loon",
            Tussenvoegsel = "van",
            Initialen = "P."
        };

        // initialiseer boek
        Boek boek = new Boek
        {
            Auteur = auteur,
            Titel = "Ravelijn",
            Isbn13 = "9789025857813",
            Druk = 1,
            UitgaveJaar = 2011,
            Uitgever = "Leopold B.V."
        };

        // initialiseer mapper
        ObjectMapper<Boek, BibliotheekItem> mapper = new ObjectMapper<Boek, BibliotheekItem>();
        mapper.AddMapping((bk, bib) => bib.Auteur = boek.Auteur.Initialen +
                                                    (string.IsNullOrEmpty(boek.Auteur.Tussenvoegsel) ? " " : " " + boek.Auteur.Tussenvoegsel + " ") +
                                                    boek.Auteur.Achternaam);
        mapper.AddMapping((bk, bib) => bib.Titel = boek.Titel);
        mapper.AddMapping((bk, bib) => bib.Uitgave = boek.Uitgever + ", " + boek.UitgaveJaar.ToString());
        mapper.AddMapping((bk, bib) => bib.Type = BibliotheekItem.ItemType.BOEK);
        mapper.AddMapping((bk, bib) => bib.Id = "ISBN13:" + bk.Isbn13);

        // Act
        BibliotheekItem bi = new BibliotheekItem();
        mapper.ApplyMappings(boek, bi);

        // Assert
        Assert.AreEqual("P. van Loon", bi.Auteur, false);
        Assert.AreEqual("Leopold B.V., 2011", bi.Uitgave, false);

当我尝试从VB.Net项目中使用此类时,目标对象的属性仍然为空。我真的没能找到原因。

Dim bron As New Bron
    Dim doel As New Doel

    bron.Prop1 = "Waarde 1"
    bron.Prop2 = "Waarde 2"

    Dim mapper As ObjectMapper(Of Bron, Doel) = New bogaarts.algemeen.ObjectMapper(Of Bron, Doel)
    mapper.AddMapping(Function(b, d) d.Prop1 = b.Prop1)
    mapper.AddMapping(Function(b, d) d.Prop2 = b.Prop2)
    mapper.PasMappingsToe(bron, doel)

    MessageBox.Show(doel.Prop1 & " : " & doel.Prop2)

有人知道我忽略了什么吗?

务实的

在VB中,您正在创建一个函数(而不是Sub)。这意味着它将具有返回类型。返回类型被推断为Boolean,并且d.Prop2 = b.Prop2被解释为相等检查而不是赋值操作。然后,该布尔返回值将被丢弃以符合的签名AddMapping,这需要一个Action

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从控制器类调用时事务回滚不起作用,但从测试类调用时起作用

来自分类Dev

从SQL Server调用时Eternal File.Exist CLR C#不起作用,但在C#中起作用

来自分类Dev

通过.NET API调用时DynamoDB UpdateItem不起作用

来自分类Dev

从NSObject调用时,DBRestClient不起作用

来自分类Dev

从BroadcastReceiver调用时,startActivity不起作用

来自分类Dev

从NSObject调用时,DBRestClient不起作用

来自分类Dev

从systemd调用时ssh不起作用

来自分类Dev

Visual C++:从 DLL 调用时 XGBoost 不起作用

来自分类Dev

“history -c”在脚本中调用时不起作用?

来自分类Dev

从CLI调用时,脚本中的Trap命令有效,但在PBS作业中使用时,则不起作用

来自分类Dev

从类中调用时,清除主机不起作用

来自分类Dev

从不同的类调用时,Java repaint() 不起作用

来自分类Dev

在python中调用时balance()方法不起作用

来自分类Dev

从外部方法调用时,RaphaelJS动画不起作用

来自分类Dev

从外部javascript调用时,getJSON url方法不起作用

来自分类Dev

从cron调用时脚本不起作用

来自分类Dev

使用子流程调用时,卷曲不起作用

来自分类Dev

执行函数调用时,Onclick函数不起作用

来自分类Dev

从嵌套函数调用时,compadd不起作用

来自分类Dev

ssh当以变量形式调用时while循环不起作用

来自分类Dev

从子组件调用时,回叫功能不起作用

来自分类Dev

切换功能在调用时不起作用

来自分类Dev

在函数开始处调用时,ClearTimeout不起作用

来自分类Dev

当在beforeSend上调用时,jQuery blockUI()不起作用

来自分类Dev

从线程调用时,Python 套接字 accept() 不起作用

来自分类Dev

powershell:在循环内调用时命令不起作用

来自分类Dev

调用时的 Cortana 技能身份验证不起作用

来自分类Dev

当从扩展插件的类中调用时,为什么调用扩展活动的类不起作用?

来自分类Dev

C# ASP.net Razor AJAX 调用方法不起作用

Related 相关文章

  1. 1

    从控制器类调用时事务回滚不起作用,但从测试类调用时起作用

  2. 2

    从SQL Server调用时Eternal File.Exist CLR C#不起作用,但在C#中起作用

  3. 3

    通过.NET API调用时DynamoDB UpdateItem不起作用

  4. 4

    从NSObject调用时,DBRestClient不起作用

  5. 5

    从BroadcastReceiver调用时,startActivity不起作用

  6. 6

    从NSObject调用时,DBRestClient不起作用

  7. 7

    从systemd调用时ssh不起作用

  8. 8

    Visual C++:从 DLL 调用时 XGBoost 不起作用

  9. 9

    “history -c”在脚本中调用时不起作用?

  10. 10

    从CLI调用时,脚本中的Trap命令有效,但在PBS作业中使用时,则不起作用

  11. 11

    从类中调用时,清除主机不起作用

  12. 12

    从不同的类调用时,Java repaint() 不起作用

  13. 13

    在python中调用时balance()方法不起作用

  14. 14

    从外部方法调用时,RaphaelJS动画不起作用

  15. 15

    从外部javascript调用时,getJSON url方法不起作用

  16. 16

    从cron调用时脚本不起作用

  17. 17

    使用子流程调用时,卷曲不起作用

  18. 18

    执行函数调用时,Onclick函数不起作用

  19. 19

    从嵌套函数调用时,compadd不起作用

  20. 20

    ssh当以变量形式调用时while循环不起作用

  21. 21

    从子组件调用时,回叫功能不起作用

  22. 22

    切换功能在调用时不起作用

  23. 23

    在函数开始处调用时,ClearTimeout不起作用

  24. 24

    当在beforeSend上调用时,jQuery blockUI()不起作用

  25. 25

    从线程调用时,Python 套接字 accept() 不起作用

  26. 26

    powershell:在循环内调用时命令不起作用

  27. 27

    调用时的 Cortana 技能身份验证不起作用

  28. 28

    当从扩展插件的类中调用时,为什么调用扩展活动的类不起作用?

  29. 29

    C# ASP.net Razor AJAX 调用方法不起作用

热门标签

归档