|
For a lot of people, upgrading to the latest version of C# will be a prohibited move due to workspace constraints. I would imagine that any display of alternatives would be a welcome addition for them.
This space for rent
|
|
|
|
|
Pete O'Hanlon wrote: For a lot of people, upgrading to the latest version of C# will be a prohibited move due to workspace constraints. Thank you for that point. Being a sole developer selling my own programs in binary only I don't have to think about those issues. I expected the .NET-version would be a workspace constraint for people but didn't expect the C#-version to be one as well. VS licensing issues I guess.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
It's more to do with corporations having .NET version upgrades in place. For instance, while .NET 4.5 builds on top of .NET 4, there were many breaking changes internally where people had put fixes in place for bugs in 4 that were done away with in 4.5, so things just didn't work the same. When a company has to think about 10K internal users, that's a lot of planning and upgrade that they have to do.
This space for rent
|
|
|
|
|
Doesn't the fact that string interpolation is only dependent on the version of the C# compiler make considerations on the compatibility of .NET versions obsolete in this case?
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Unfortunately - for most corporations, they won't upgrade the compiler independently of the framework. They will upgrade the compiler when they install VS 2015.
This space for rent
|
|
|
|
|
I see. Thank you, Pete!
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
I'm still using String.Format method when the string is in a resource file.
For example, imagine you have this string resource:
MyStringResource = "A problem occured in {0}."
You then cannot use the new C# 6 string interpolation, and have to resort to the good old:
string location = "an undefined place";
string message = string.Format(Resources.MyStringResource, location);
Other than that, I try to use the string interpolation where I can.
Regards.
I never finish anyth
|
|
|
|
|
Also a good point, thank you!
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Sascha Lefèvre wrote: interpolation built into C# 6,
I have no plans to use either. String.Format will continue to be my weapon of choice for a good long while.
The ability to compile against older versions will often outweigh the "shiny and new".
Don't use any new feature unless and until it provides a real benefit.
Consider, also, what if you write code that must compile under new and old versions? Will you write it both ways with conditional compilation? Make a branch in your version control and have to maintain two versions? Isn't it simpler to write it only the "old" way and reduce maintenance?
On the other hand, I have an Extension Method:
public static string
Format
(
this string Format
,
System.Collections.IList Parameter
)
(By the by, Extension Methods are about the newest C# feature I use, even though I feel they were implemented wrong.)
|
|
|
|
|
PIEBALDconsult wrote: The ability to compile against older versions You can use string interpolation with older .NET versions, you just have to use the C# 6 compiler. Or am I missing your point?
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
|
Alright then Richard mentioned the ASP.NET issue where you can't freely choose your compiler. Do you have another scenario where this is the case?
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
It's a choice. I use the oldest compiler that does what I need.
|
|
|
|
|
Fair enough
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
PIEBALDconsult wrote: I use the oldest compiler that does what I need.
So you're still using the A-0 System[^] then?
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
String interpolation won't work if you're targeting anything before .NET 4.6, unless you add specific classes[^] to your project.
ASP.NET sites - particularly "Web Site" projects - are also an issue. Unless you install a local copy of the compilers in your project via a NuGet package[^], the site will be compiled using the old compilers, and no C# 6 features will work. This seems to be the case even on a system with .NET 4.6 installed, which is rather annoying.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard Deeming wrote: ASP.NET sites - particularly "Web Site" projects - are also an issue. Another good point, thank you!
Richard Deeming wrote: String interpolation won't work if you're targeting anything before .NET 4.6, unless you add specific classes[^] to your project. It does work in general - just the context-dependent conversion to an IFormattable does not without those helper classes.
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
I have personally adapted, over years, to using the bracketed place-holder syntax in strings, and it's no longer something I have to really "think about" using; and, using ReSharper, if you type: string result = "result: " + somevariable;, ReSharper will show a little flag you can click that will automatically convert that to a String.Format invocation.
The new syntax looks more "elegant," I think, but from a what-you-have-to-type point of view it looks like it would "cost" as much as the current syntax.
However, I will always be interested to see what your creative mind has come up with. And, I hope you will publish whatever you are doing with formatting.
«Tell me and I forget. Teach me and I remember. Involve me and I learn.» Benjamin Franklin
|
|
|
|
|
BillWoodruff wrote: The new syntax looks more "elegant," Yes, that's the point for me. When dealing with very large format strings with many placeholders the numeric syntax makes it very non-intuitive what the result will be. I found some custom solutions that accomplished about the same as the new C# 6 syntax but they were really slow, comparatively, because they used RegEx'.
BillWoodruff wrote: I hope you will publish whatever you are doing with formatting. I will!
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
As I am working alone on all my projects, I've instantly moved to C#6 as it came out. I actually tried the CTP already (only in a minor project, though).
After all I can say that I used ReSharper to convert my whole project to interpolation. It's way easier to use and cleaner to read. There are situations, though, when you have to use string.Format() or custom implementations. But this is rather rare.
I love all C#6 features and use them quite a lot. Especially because ReSharper notifies me about everything that can be made easier with the new language features.
|
|
|
|
|
GravityPhazer wrote: There are situations, though, when you have to use string.Format() or custom implementations. Can you name one (or more) from the top of your head that hasn't been mentioned yet?
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Ah sorry, withdraw that. I thought I had a problem using conditional with strings:
Write($"Test is {(isTest ? "enabled" : "disabled")}");
But I obviously just mixed up something with the brackets.
That, though, is something that's clearly some kind of disadvantage: Using something like this makes it kinda difficult to read ore more like difficult to find the error if you place any bracket wrong (or have any other kind of syntax issue). At least if you use a lot and/or complex expressions.
But I still prefer interpolation
I personally had to get used to it first, though. I think it's nicer to use than string.Format() and although I built a string extension method which let's me quick format a string, I think this is better to use. I think it's definetly an advantage that you actually see which variable or value you have at that spot. With format you just see the index there and have to check which value is actually being set (especially when you got >4 elements with an object array).
But like I said, in the beginning I forgot most of the time to first write the indicator sign $ , and thus had to go back - which is indeed more time consuming then. But that's just temporary.
|
|
|
|
|
Yep, I like it too, in general. Things like your example or if you have a deeply nested value then make it less readable again. That's why I still like my custom solution (not the first of its kind) better in those cases:
string text = "Test is {enabled}. Also {foo}.".XFormat(new
{
enabled = isTest ? "enabled" : "disabled",
foo = some.Really.Deep.Nested.Value[index]
});
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|
|
Well, I haven't ever thought about using anonymous classes for that.
I've written something that makes it easier (since I not only forget $ but also string.Format() at the beginning) by formatting at the end, like with your example. But using the same approach as the default format:
var myString = "Test value 1 is {0} and value two is {1}".FormatWith(value1, value2);
The cool thing is that thanks to ReSharper you can tag that method as formatting method, and thus it highlights the placeholder braces if you use that method on a string. Pretty neat!
But using anonymous types for that is a nice idea, as well. I should implement that, too
PS: I should mention I implemented that method far before anonymous types were supported.
|
|
|
|
|
GravityPhazer wrote: But using anonymous types for that is a nice idea, as well. I should implement that, too Unless you want to do it for kicks, you might want to wait for my article on that
If the brain were so simple we could understand it, we would be so simple we couldn't. — Lyall Watson
|
|
|
|