|
Argonia wrote: Who the hell had the brilliant idea to make Tuples read only ? And why the elephant ?
The design of the System.Tuple classes is more to do with the BCL team than the C# team. Any .NET language which uses these classes will get the same read-only behaviour.
And they're read-only because they originated in functional programming, where pretty much everything is immutable.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Actually, tuples largely come from functional languages where everything is immutable. There are all sorts of benefits - for example immutable objects are guaranteed to be thread-safe, are simpler to reason about, and offer higher security than mutable objects.
Also, importantly, if they were mutable, by definition they wouldn't be tuples. If you want a mutable, ordered collection of elements, write one and call it something else!
Wikiepdia has a good entry on immutable objects[^].
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|
|
Take no offense, but you don't know what you're talking about, don't you?
Mutable Tuples are called lists and/or classes.
Having Tuples is great if you need to have a Dictionary which happens to need two keys: you don't need a custom class or some other custom solution, you just use the tuple as key.
Mutable data means the hash will change, so you cannot.
Read Immutable as hashable. It really makes a LOT of sense to have tuples.
You just have to learn why they are there in the first place and you'll discover that the .NET Framework is one of the best around. And IMO the best, period.
My 2 c: Convert is a fossil from 1.0/1.1 era. Never used it since generics went out.
|
|
|
|
|
Actually i do,
So basically i was looking for a way to make a vector with a pair of strings. After some google ing i found about list with Tuples. It was fun when i decided that this list must me modified.
After few hours later i found about KeyValuePair.
And btw everything what M$ sux including c#.
Microsoft ... the only place where VARIANT_TRUE != true
|
|
|
|
|
So you're telling me you needed a screwdriver, but you don't know what a screwdriver is.
So you googled for it and picked up a drill.
Then you found out that it didn't worked to do the job you need.
And you blame Microsoft for this.
I suggest you could read "The Pragmatic Programmer".
Look, I'm not a MS fan boy, I think many libraries MS is pushing (or where pushing) are crap.
But there is a core of consistency and completeness in the .NET framework that I never found out in other core libraries. And an elegance in C# that is unknown to Java.
If you don't agree, tell me a better language to do the same kind of stuff you can do in C#.
Currently, you seem to bash M$ just for the sake of your incompetency (literally: you're not competent regarding the job you do).
I love Python (but it's library is light years lagging on naming conventions), I enjoy JavaScript (but you must know what works and what will break your programs), but the building of the .NET Framework is a major accomplishment.
|
|
|
|
|
Oh, and BTW KeyValuePair is not a vector. It's only a Dictionary item.
You could use it to store two strings, but you probably would be better set implementing a class with two members, x and y.
|
|
|
|
|
My point was that i needed List<keyvaluepair<string, string="">> somesh*t = new List<keyvaluepair<string, string="">>(); for my vector.
There is a Pair structure defined in System.Web.UI.Pair namespace. Who the hell does that. Define the same thing under different name in different namespace, oh, wait M$
Now you have 3 things for pair
-Tuple - up to 7 items cuz you never know if the programmer can make 7 items list with Pair alone
-KeyValuePair
-Pair
When the last 2 are basically the same.
Microsoft ... the only place where VARIANT_TRUE != true
|
|
|
|
|
There is no point in what you're saying.
There wasn't before and for sure there isn't in this.
What do you have to do with that data? It's an x and y coordinates (like a vector) or it's simply two strings?
Why an array string[2] is not ok? What you need to accomplish?
And why aren't you creating a simple, 5 lines class to do that? With 2 properties x and y?
Do I have to explain you the difference between those 3? It seems you cannot read the documentation...
Don't blame the language, blame the programmer.
Stop whining and read a book.
|
|
|
|
|
I was talking about this vector.
Microsoft ... the only place where VARIANT_TRUE != true
|
|
|
|
|
Hello? You there? You want a C++ style vector to store 2 values? Why should it change in size? You didn't studied even the stl, did you?
This just proves that you don't know anything about the things you're writing and just keep whining about everything you don't get right in the first place (by pure chance).
Why List<string> isn't fit? Or ArrayString, if you need not type checking?
Why string[2] is not ok?
If the 2 elements are really different things, why not write down a class with 2 properties?
Noooo, let's just pretend you already know everything you need and bash the framework on the internet.
I hope I'll never have to maintain your code.
|
|
|
|
|
robocodeboy wrote: Why List<string> isn't fit? Or ArrayString, if you need not type checking?
Why string[2] is not ok?
If the 2 elements are really different things, why not write down a class with 2 properties?
Because i have a pairs of 2 strings which i have to store and modify.
Did you try making List<string[2]> type value ?
I don't need a new class i have a structure defined already in c# (even 3 stuctures)
Microsoft ... the only place where VARIANT_TRUE != true
|
|
|
|
|
Either you're a troll or you don't know what you're talking about.
Strings in C# are immutable anyway. But you can assign to List and array in which way you want.
List<string> list = new List<string>() { "a", "b" };
list[0] = "I";
list[1] = "work";
string[] array = new string[2] { "1", "2" };
array[0] = "Me";
array[1] = "too";
|
|
|
|
|
robocodeboy wrote: And an elegance in C# that is unknown to Java. You are mistaken c# doesn't have any elegance. The elegance you see is only part of the beauties of c and c++. But ofcouse M$ decided that not all is needed and they decided to leave some things (templates, pointers, friend, and so on) and call it a new language because they added few libraries.
Microsoft ... the only place where VARIANT_TRUE != true
|
|
|
|
|
Yes, of course.
C++ is so elegant that his grammar is undecidable, and no IDE in the world can give you a decent code completion. But maybe you're Klingon and you remember variable names by heart.
C is elegant, yes. Just as an haiku. I completely enjoyed writing really quick, incomprehensible code that did simple stuff in clever ways, but designing UIs in C or C++ is an exercise in pain. Not mentioning organizing and building complex projects.
C++ templates can do some clever stuff, but generics are pretty similar and less prone to breaking apart your build time. The only thing I miss in C# are mixins, but they are hard to manage even in C++.
Pointers are in C# too, but you don't need to use them, usually. You can, but only if you have tight loops to be optimized.
Friend is useless if you have internal members and friend assemblies. And private is considered more valuable than it is and not unit testable.
Oh, and if "few libraries" means the single most extended library in existence yes, you are right.
To one that makes this kind of statements, I can only suggest to (choose one in three):
- RTFM and stop blaming others for what you get in the toolkit, instead of having to roll your own.
- change language. Maybe the kind of stuff you're doing is not best suited for C# (I doubt, but...)
- write your own language. You seem to be a world class language guru. Way better than that M$ scum. For sure you can tackle that task.
A language is a tool, if you can't do stuff and blame the tool, either you change it or learn to use it.
Blaming is easier (I remember people complaining about that stupid C compiler that was continually raising segmentation faults).
Good luck!
|
|
|
|
|
Argonia wrote: Who the hell had the brilliant idea to make Tuples read only?
er Eric Lippert[^]...but what does he know anyway!
|
|
|
|
|
I'm working on a maintenance project for a client. It's ASP .NET MVC. When exporting some charts, they use an HTML To Image converter. I found this today:
if (Session["tWidth"] != null)
{
htmlToImageConverter.BrowserWidth = int.Parse("1025");
}
I've seen similar posts here before. Why call int.Parse() and pass what's obviously an integer, instead of simply assigning: 1025? Why, oh why?
djj55: Nice but may have a permission problem
Pete O'Hanlon: He has my permission to run it.
|
|
|
|
|
And what is the tWidth for? Is it an integer? Or just some random value?
Getting information off the Internet is like taking a drink from a fire hydrant.
- Mitchell Kapor
|
|
|
|
|
I had a difficult time understanding that as well. 'tWidth' is, in fact, an integer. In other places throughout the project it's used to store the width of certain widgets in a report. But this particular statement, I have no idea. That's literally all the code in it. It never references 'tWidth' in this particular section. *smh*
There are a ton of bad practices in this project. A lot of empty 'catch' statements after a large 'try' block and so forth. Almost *ZERO* comments. Blah, blah, blah.
djj55: Nice but may have a permission problem
Pete O'Hanlon: He has my permission to run it.
|
|
|
|
|
Getting information off the Internet is like taking a drink from a fire hydrant.
- Mitchell Kapor
|
|
|
|
|
It may be for those special people with a 1025 x 768½ screen resolution?
|
|
|
|
|
The reason behind that WTF is likely simple: somewhen during development, there was a problem, or an extreme value case had to be tested (width greater than screen width), and a developer decided to replace temporarily
htmlToImageConverter.BrowserWidth = int.Parse(tWidth);
by
htmlToImageConverter.BrowserWidth = int.Parse("1025");
But then forgot to change it back. And nobody complained till you happened to find that WTF...
|
|
|
|
|
Quote: But then forgot to change it back. You're probably right; however, that takes all the fun out of harassing the previous developer for this.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
That's a very reasonable observation, and you're probably quite right. Thank you for that. Now I'm going to put "tWidth" back in there and see if it fixes some of these problems. Haha.
djj55: Nice but may have a permission problem
Pete O'Hanlon: He has my permission to run it.
|
|
|
|
|
Be careful! It might introduce a new defect now - do you know how many later changes assume that that WTF is the correct solution?
|
|
|
|
|
Haha. I changed it and it didn't make any difference whatsoever.
djj55: Nice but may have a permission problem
Pete O'Hanlon: He has my permission to run it.
|
|
|
|