Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

DestinationTransform.EmptyCollectionIfNull overrides explicit null mapping

Abierto
#952 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

  • #960 de @wyf027 — cerrado sin fusionar

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
csharp
Área
backend

Línea de trabajo

Comienza con el registro de DestinationTransform.EmptyCollectionIfNull y el caso de DestinationTransformTests mostrados en el issue, y luego reproduce el comportamiento usando el TypeAdapterConfig y los tipos Foo/FooDto proporcionados. Rastrea cuándo se ejecuta la transformación de destino global con respecto al resultado explícito de .Map(...); se considera terminado cuando el test pasa manteniendo foo.Strings en null.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
C#
Estrellas
5.2k
Forks
409
Merge medio
3 d 4 h
PR fusionados (30 d)
3

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MapsterMapper/Mapster

Todos los issues de MapsterMapper/Mapster

Issues similares

Más issues de C#

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.