Jak sprawdzić czy część własności obiektu jest null?

0

Hej, mam obiekt:

var object = new SomeObjectType()
{
   Prop1 = null,
   Prop2 = null,
   Prop3 = 665
}

Zakładając, że Prop3 nigdy nie będzie null, jak sprawdzić czy wszystkie pozostałe są null, albo któraś z nich nie jest?

Na razie mam:

if (object.Prop1 == null && object.Prop2 == null)
{
   //do stuff
}

Ale to jest strasznie nieeleganckie, szczególnie jakbym miał większą ilość własności obiektu. A użytku z Null-conditional operators ?. and ?[] tutaj nie widzę.

Jak to zrobić z C#?

1

Albo refleksja albo dictionary rozwiąże twój problem. Choć sam problem jest bardzo nietypowy

0
fasadin napisał(a):

Albo refleksja albo dictionary rozwiąże twój problem. Choć sam problem jest bardzo nietypowy

Może źle podszedłem do problemu w projekcie, ale w obiekcie zwracanym z serwisu mam kupę własności, z których 2 zawsze mają wartość, a pozostałe czasami wcale. I chcę oszczędzić zapytań do DB w wypadku, jeśli tylko te 2 własności mają wartość. Choć pisząc to wpadłem na pomysł, że policzę własności które mają wartość, i jeśli są tylko 2, to przeskoczę dalej.

0

Jak masz dostęp do tego obiektu to opakuj tego ifa we właściwość. A jak nie masz to extension method ktora robi to samo.

0

Spoko, rozwiązałem to tak:

public (...)
{
if (NonNullPropertiesCount(update) <= 1) return false;

            return true;
}

private int NonNullPropertiesCount(object entity)
        {
            return entity.GetType()
                         .GetProperties()
                         .Select(x => x.GetValue(entity, null))
                         .Count(v => v != null);
        }
1

jak używasz C# 8 to możesz napisać

if (object is { Prop1: null, Prop2: null })
{
   // do stuff
}

kompiluje się to do tego samego co

if (object != null && object.Prop1 == null && object.Prop2 == null)
1
bakunet napisał(a):

Spoko, rozwiązałem to tak:

public (...)
{
if (NonNullPropertiesCount(update) <= 1) return false;

            return true;
}

private int NonNullPropertiesCount(object entity)
        {
            return entity.GetType()
                         .GetProperties()
                         .Select(x => x.GetValue(entity, null))
                         .Count(v => v != null);
        }

I to niby jest bardziej eleganckie niż zwykły null check na dwóch property?

1 użytkowników online, w tym zalogowanych: 0, gości: 1