Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

DestinationTransform.EmptyCollectionIfNull overrides explicit null mapping

未关闭
#952 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

  • #960 来自 @wyf027 —— 已关闭,未合并

评估

难度
3/5
预计耗时
1-2 天
新手友好度
68/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
冷清
技术栈
csharp
领域
backend

调研方向

从 issue 中展示的 DestinationTransform.EmptyCollectionIfNull 注册和 DestinationTransformTests 用例开始,然后使用提供的 TypeAdapterConfig 以及 Foo/FooDto 类型重现该行为。跟踪全局 destination transform 相对于显式 .Map(...) 结果的执行时机;当测试通过且 foo.Strings 仍为 null 时即完成。

由索引模型根据 Issue 内容生成。

描述

When DestinationTransform.EmptyCollectionIfNull is configured globally via config.Default, it still overrides explicitly defined mappings that return null.
This behavior is unexpected because explicit mappings (via .Map(...)) should take precedence over global/default transforms.

  • Mapster version: 10.0.8-pre06
  • .NET version: net10.0
class FooDto
{
    public string[]? Strings { get; set; }
}

record Foo(string?[] Strings);

public class DestinationTransformTests
{
    [Fact]
    public void ExplicitNullMapping_ShouldNotBeOverridden_ByDefaultEmptyCollectionTransform()
    {
        // Configure
        var config = new TypeAdapterConfig();

        config.Default
            .AddDestinationTransform(DestinationTransform.EmptyCollectionIfNull);

        config.NewConfig<Foo, FooDto>()
            .Map(d => d.Strings, _ => (string[]?)null);

        // Arrange
        var fooDto = new Foo([]);

        // Act
        var foo = fooDto.Adapt<FooDto>(config);

        // Assert
        foo.Strings.ShouldBeNull();
    }
}

Expected behavior

The explicit mapping:

.Map(d => d.Strings, _ => (string[]?)null)

should be respected, resulting in foo.Strings == null.

Actual behavior

foo.Strings is transformed into an empty array, meaning that EmptyCollectionIfNull is applied after the explicit mapping and overrides it.

Notes

The transform is registered on config.Default, not per-type.
This suggests that global destination transforms are applied at a stage where they override even explicit mapping results.
This makes it impossible to explicitly map a collection property to null when EmptyCollectionIfNull is enabled globally.

主要语言
C#
星标
5.2k
派生
409
平均合并
3 天 4 小时
30 天内合并 PR
3

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

MapsterMapper/Mapster 的其他 Issue

查看 MapsterMapper/Mapster 的全部 Issue

相似的 Issue

更多 C# Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。