Ich halte ValueTuple in öffentlichen Membern für kein gutes Design. Nehmen wir an, ich will eine Adresse zurückgeben und mache das mit einer Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| public class Address { public string Street {get; set;} public string City {get; set;} } public class Person { public Address GetAddress() { } } |
Alternativ per ValueTuple
C#-Quelltext
1: 2: 3: 4: 5:
| public class Person { public (string Street, string City) GetAddress() { } } |
Irgendwann später entscheide ich, dass die Adresse auch ein Land enthalten soll. In der ersten Variante erweitere ich die
Address-Klasse um eine Property
Country. Da ich nur erweitere, funktioniert Code, der meine
GetAddress-Methode benutzt hat, problemlos weiter, ohne Ändeurngen.
Bei der ValueTuple-Variante sieht das anders aus. Will ich die erweitern, sieht das so aus:
C#-Quelltext
1: 2: 3: 4: 5:
| public class Person { public (string Street, string City, string Country) GetAddress() { } } |
Was hier passiert, ist, dass ich
einen anderen Typ zurückgebe und damit funktioniert
keiner der Codes mehr, der meine
GetAddress-Methode benutzt.
Ich würde daher sehr stark empfehlen, ValueTuple ausschließlich für private Member zu benutzen.
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".