Wie würden Sie LINQ-Aggregatfunktionen (z. B. Summe, Durchschnitt) für Sammlungen von Bytes, Kurzschlüssen und vorzeichenlosen Werten verwenden? Zugegeben, ich bin ein neuer C # -Programmierer, aber ich kann nicht einmal herausfinden, wie man etwas kompilieren kann, geschweige denn eine korrekte Ausgabe hat.
Hier ist ein triviales Beispiel für das, was ich versuche zu tun:
%Vor%oder
%Vor%Ich kann keine dieser Proben verwenden. Wenn ich den Datentyp in int ändere, funktioniert es, aber ich kann es nicht für Kurzschlüsse, Bytes, uintas usw. arbeiten.
Was mache ich falsch?
Enumerable.Sum<T>()
ist nur für IEnumerable<T>
und T
in
Dies liegt daran, dass es keinen Additionsoperator * für short
oder einen anderen primitiven Typ gibt ( short + short
ist zB int
).
Sie müssen sagen:
%Vor%und weniger explizit können Sie mit
davonkommen %Vor%In diesem Fall rufen Sie jetzt die Überladung auf:
%Vor% * : Hier meine ich "operator" im Sinne einer Funktion F:(short x short) -> short
.
Enumerable.Sum
akzeptiert entweder int
s, long
s, single
s oder double
s.
Sie können die Zahlen so umwandeln, dass sie als Parameter infrage kommen:
%Vor% Alternativ können Sie ein Func<TSource, int>
Lambda bereitstellen, das int
auswählt. s für dich:
Ich erkläre sum
als int
weil es wirklich unsicher ist zu glauben, dass eine Summe von short
s ein short
selbst ist.
Es spiegelt sich sogar in der Tatsache wider, dass explizites Casting erforderlich ist beim Hinzufügen von short
s:
Also Wenn Sie sicher sind, dass Sie nicht überlaufen werden, geben Sie einfach das Ergebnis ein :
%Vor%