|
GKP1992 wrote: Create a nested tuple and now you don't know which element you are referring to when you say Item2 Tuple "items" can be named, so:
var name = GetMyName(); where:
(string firstName, string lastName) GetMyName()
{
return ("Marc", "Clifton");
}
I can use name.firstName and name.lastName
Most of the time.
|
|
|
|
|
|
Yes
Check out my IoT graphics library here:
https://honeythecodewitch.com/gfx
And my IoT UI/User Experience library here:
https://honeythecodewitch.com/uix
|
|
|
|
|
The slightly weird thing that disturbs me about that is that firstName and lastName behave/look a lot like members of a class/struct yet don't have Pascal Case naming.
name.firstName vs. name.FirstName
It reminds me of Javascript, and well you know what that can inflict on the soul.
Regards,
Rob Philpott.
|
|
|
|
|
Nice example. I fired up C# Repl and tried it out.
|
|
|
|
|
Yes, tuples are great, especially as a replacement for out string foo and I use them primarily for returning multiple things for rather low level methods when out or a C# class/struct is just overkill. The fact that the tuple parameters can be named was a huge advancement, rather than having to use Item1 , Item2 , etc.
That said, I use them judiciously and always ask myself, if I'm using a tuple here, is that the right approach or am I compensating for a possibly bad "design."
For example (this from code I have in a library):
public (HttpStatusCode status, string content) Get(string url, Dictionary<string, string> headers = null)
{
var client = RestClientFactory();
var request = new RestRequest(url, Method.Get);
headers?.ForEach(kvp => request.AddHeader(kvp.Key, kvp.Value));
RestResponse response = client.Execute(request);
return (response.StatusCode, response.Content);
}
Why am I parsing out the status code and content instead of just returning the response object? One answer is that returning response may probably require a using RestSharp and even a reference to the RestSharp package in the caller project.
OK, maybe that's a defensible argument, maybe not. After using this library of mine (REST is just one small part of this library) I'm not that thrilled with my initial wrapper implementation.
But because I started this "pattern", it continues, like:
public (T item, HttpStatusCode status, string content) Get<T>(string url, Dictionary<string, string> headers = null) where T : new()
{
var client = RestClientFactory();
var request = new RestRequest(url, Method.Get);
headers?.ForEach(kvp => request.AddHeader(kvp.Key, kvp.Value));
RestResponse response = client.Execute(request);
T ret = TryDeserialize<T>(response);
return (ret, response.StatusCode, response.Content);
}
And this illustrates mashing together various potentially bad implementation/designs. The tuple now returns three things, and the TryDeserialize catches exceptions silently, returning a null for T item , and what if I want the actual deserialization exception?
And now that I look at that code again after a couple years, what's with that AddHeader loop when there's a perfectly fine AddHeaders method?
Gads, I wish there were people smarter than me at work that could review my code!
Anyways, thanks for reading this longish post.
|
|
|
|
|
I think there are very few people smarter than you.
The difficult we do right away...
...the impossible takes slightly longer.
|
|
|
|
|
I don't use them much. I usually prefer to create a class. It kinda depends on how important the thing is.
|
|
|
|
|
I love them because sometimes it is convenient to return more than one value from a method, and the use case doesn't justify the overhead of creating and populating a POCO.
There are no solutions, only trade-offs. - Thomas Sowell
A day can really slip by when you're deliberately avoiding what you're supposed to do. - Calvin (Bill Watterson, Calvin & Hobbes)
|
|
|
|
|
Tuples and anonymous classes have drastically reduced the number of single-use classes in my code
|
|
|
|
|
I don't use C# much these days but totally agree. And, digging the positivity man.
Jeremy Falcon
|
|
|
|
|
Like (almost) everything in C#, they have their uses. Loving them? No!
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
|
|
|
|
|
Wordle 1,187 5/6
⬜⬜🟩⬜⬜
⬜⬜🟩⬜⬜
⬜🟩🟩🟩🟩
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩
|
|
|
|
|
Wordle 1,187 4/6*
⬜🟨⬜⬜⬜
🟨⬜⬜⬜⬜
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩
Happiness will never come to those who fail to appreciate what they already have. -Anon
And those who were seen dancing were thought to be insane by those who could not hear the music. -Frederick Nietzsche
|
|
|
|
|
Wordle 1,187 X/6*
⬜🟨⬜⬜⬜
🟨⬜⬜⬜⬜
⬜⬜🟩⬜🟩
⬜🟩🟩🟩🟩
⬜🟩🟩🟩🟩
⬜🟩🟩🟩🟩
|
|
|
|
|
Damn I hate when it happens
GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++* Weapons extension: ma- k++ F+2 X
The shortest horror story: On Error Resume Next
|
|
|
|
|
Wordle 1,187 5/6*
⬜⬜⬜⬜⬜
⬜🟩⬜⬜⬜
⬜🟩⬜⬜🟩
⬜🟩🟩⬜🟩
🟩🟩🟩🟩🟩
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
"Common sense is so rare these days, it should be classified as a super power" - Random T-shirt
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
⬜⬜⬜⬜⬜
⬜⬜⬜🟨⬜
⬜⬜🟨⬜⬜
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩
In a closed society where everybody's guilty, the only crime is getting caught. In a world of thieves, the only final sin is stupidity. - Hunter S Thompson - RIP
|
|
|
|
|
Wordle 1,187 5/6*
⬛⬛⬛⬛⬛
⬛⬛⬛⬛⬛
🟨🟩⬛⬛🟩
⬛🟩🟩🟩🟩
🟩🟩🟩🟩🟩
|
|
|
|
|
Wordle 1.187 4/6
⬛⬛⬛🟩🟩
⬛⬛⬛⬛⬛
⬛🟩⬛⬛⬛
🟩🟩🟩🟩🟩
I've been so fast it's almost been a speedrun
GCS/GE d--(d) s-/+ a C+++ U+++ P-- L+@ E-- W+++ N+ o+ K- w+++ O? M-- V? PS+ PE Y+ PGP t+ 5? X R+++ tv-- b+(+++) DI+++ D++ G e++ h--- r+++ y+++* Weapons extension: ma- k++ F+2 X
The shortest horror story: On Error Resume Next
|
|
|
|
|
Wordle 1,187 6/6
⬜🟩⬜⬜⬜
⬜🟩🟩⬜⬜
⬜🟩🟩⬜🟩
⬜🟩🟩⬜🟩
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩
Phew...
|
|
|
|
|
Wordle 1,187 6/6
⬜⬜⬜⬜⬜
⬜⬜🟨⬜⬜
⬜🟩⬜🟩🟨
🟨🟩⬜⬜🟩
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩
|
|
|
|
|
Wordle 1,187 5/6
⬛⬛⬛⬛⬛
⬛⬛⬛⬛⬛
⬛🟨🟨⬛⬛
⬛🟩🟩🟩🟩
🟩🟩🟩🟩🟩
First two rows with nothing??
This day is not starting well!
Ok, I have had my coffee, so you can all come out now!
|
|
|
|
|
Wordle 1,187 5/6
⬜⬜⬜⬜⬜
⬜⬜⬜🟨⬜
🟩🟩⬜⬜🟩
🟩🟩⬜⬜🟩
🟩🟩🟩🟩🟩
"A little time, a little trouble, your better day"
Badfinger
|
|
|
|
|
Wordle 1,187 5/6
⬜⬜⬜⬜⬜
⬜🟩⬜⬜⬜
🟨🟩⬜⬜🟩
⬜🟩🟩🟩🟩
🟩🟩🟩🟩🟩
Within you lies the power for good - Use it!
|
|
|
|