Wie kann ich meinen generischen Vergleich (IComparer) mit Nullen umgehen lassen?

8

Ich versuche, einen generischen Objektvergleich für das Sortieren zu schreiben, aber ich habe bemerkt, dass er nicht mit der Instanz arbeitet, bei der einer der Werte, die er vergleicht, null ist. Wenn ein Objekt null ist, möchte ich, dass es dasselbe behandelt wie die leere Zeichenfolge. Ich habe versucht, die NULL-Werte auf String.Empty zu setzen, aber dann bekomme ich einen Fehler von "Objekt muss vom Typ String sein", wenn Sie CompareTo () darauf aufrufen.

%Vor%

Ich bin jetzt ziemlich fest damit! Jede Hilfe wäre willkommen.

    
NickG 31.01.2011, 14:58
quelle

4 Antworten

15

Sie können Ihre T nicht als leere Zeichenfolge behandeln, es sei denn, Ihr T wurde effektiv als Zeichenfolge festgelegt. Was Sie tun sollten ist ein Plan für den Vergleich von Nullen. Wie zum Beispiel

%Vor%     
Anthony Pegram 31.01.2011, 15:18
quelle
1
%Vor%     
LukeH 31.01.2011 15:27
quelle
0

Da T ein generischer Typ ist, können Sie ihm keinen String -Wert zuweisen; Sie können ihm nur einen Wert vom Typ T zuweisen. Wenn Sie dies nur verwenden werden, um Strings zu vergleichen, verwenden Sie String anstelle von T . Andernfalls fügen Sie Nullprüfung hinzu und entscheiden Sie, wo in der Reihenfolge null fallen soll.

    
Michael K 31.01.2011 15:05
quelle
0
%Vor%

Dies bedeutet im Grunde, dass obj1 nun der Wert von propertyInfo.GetValue (x, null) ist, oder, wenn das null ist, wird obj1 "".

Wenn das Problem darin besteht, dass GetValue bei null abstürzt, könnten Sie etwas tun wie:

%Vor%     
Alxandr 31.01.2011 15:09
quelle

Tags und Links