|
|
who said it does not works, it's about reinventing the wheel
|
|
|
|
|
Not just reinventing it, but reinventing it to be less efficient. The actual HasValue implementation just checks an internal flag that's set to true when a value is assigned.
|
|
|
|
|
My advice - don't change the code, and hope your "very senior developer" doesn't have a CP account.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
i won't change and i am sure senior dev does not use CP
|
|
|
|
|
You see that large number at the top left of this website? A large fraction of those are actually sockpuppets with John pulling the strings. Don't be surprised if the 'persona' of your senior colleague appears out of nowhere.
Best Wishes,
-David Delaune
|
|
|
|
|
Especially since OP's using his real name
|
|
|
|
|
That code certainly .HasValue
|
|
|
|
|
A consultant friend of mine who has been programming far longer than I have—he started programming on the early Macs and helped write the first music notation software for the Mac—doesn't see why C# should need to use .SubString() to get the left/right most characters from a string and instead wrote these. I don't really have a problem with this sort of thing. I just don't see the point, but that's just me.
public string LeftStringFunction(string sValue, int iMaxLength)
{
if (string.IsNullOrEmpty(sValue))
{
sValue = string.Empty;
}
else if (sValue.Length > iMaxLength)
{
sValue = sValue.Substring(0, iMaxLength);
}
return sValue;
}
public string RightStringFunction(string sValue, int iMaxLength)
{
if (string.IsNullOrEmpty(sValue))
{
sValue = string.Empty;
}
else if (sValue.Length > iMaxLength)
{
sValue = sValue.Substring(sValue.Length - iMaxLength, iMaxLength);
}
return sValue;
}
"...JavaScript could teach Dyson how to suck." -- Nagy Vilmos
|
|
|
|
|
Looks like somebody's trying to reinvent VB6's Left$ and Right$ , neither of which throw an exception if you specify a length that's longer than the string.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Left$ would be GwBasic (not VB6 where the $s were dropped)
|
|
|
|
|
The $ s weren't required, but IIRC they were still allowed. Left returned a Variant , whereas Left$ returned a String .
But I could be wrong - it's been over 15 years since I last touched VB6.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Ah yes, now that you say it, it sounds vaguely familiar
|
|
|
|
|
Richard Deeming wrote: either of which throw an exception if you specify a length that's longer than the string.
Why on Earth should they?
GCS 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--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X
|
|
|
|
|
Because that's how there were designed. Probably because that's how the Java version[^] works.
Specifying an index or a length outside of the string is usually a sign that something's gone wrong. In which case, it's better to have your application crash than for it to continue with potentially corrupted data.
If you don't like it, you can always add your own checks. Or roll your own "ignore-the-errors" wrappers. Or call the VB.NET methods[^].
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
If Right$() and Left$() make some other code easier to parse. Good for him.
It seems like those should be static or some sort of extension method.
What is "this" in those methods?
|
|
|
|
|
I seem to remember VB having that functionality for strings.
|
|
|
|
|
Well obviously checking for false (in the calling code) is so much better than checking for null.
Plus, if the int isn't null (contains a value) then you get the wonderful True back and true just makes you feel good.
|
|
|
|
|
Yes exactly
|
|
|
|
|
my one of the colleague just pinged me with :
IsHasValue() => IsHasHavingValuePerhaps();
|
|
|
|
|
Remimds me of the code generated by a compiler I once knew:
This was in the days of the superminis, very much CISC. This machine (called ND-500) had a "LoadIndex [register] [indexvalue] [min] [max]" instruction: If the value at [indexvalue] was not between [min] and [max], a exception was generated.
This compiler could (optionally) verify all array indexing, using this instruction, but not quite in the straightforward way that you might think. A disassembly showed something like this
LOAD R4, indexvalue
COMP R4, min
JUMPLT error
COMP R4, max
JUMPGT error
% everything is OK, go ahead
...
error:
LOADINDEX R4, R4, 0, -1 % no legal range, will unconditionally generate exception
Generating six instructions to replace a single one can be meaningful, but hardly when one of the six is the instruction you want to replace... I was working in the company making both the CPU and the compiler, so I went to the compiler guy for an explanation. He insisted that since index check was an option, it should not change any code generated, only add code: The index check is like a debugging aid that you might turn off in a production build, and the production version should be exactly the code you debugged, minus the debug features. With the option off, the first instruciton (LOAD R4, indexvalue) was generated. Turn it on, and you get the five additional instructions.
Needless to say: Even though his argument sort of sounds plausible, I strongly disagreed with him. First, index checking is not a debug feature; you keep it on in the production version. Second: Given an option set, the compiler should be free to the best code for that selection of options, ignoring other option sets (think of optimization options!)
After much arguing, he agreed to rather generate
LOAD R4, indexvalue
LOADINDEX R4, R4, min, max
... two instructions is better than six. But he stuck to his principles: I never got him to generate a singel LOADINDEX.
|
|
|
|
|
that's why i wouldn't get in discussion with senior dev on this
|
|
|
|
|
Does it predate the Nullable data type being added to the framework?
|
|
|
|
|
the parameter is itself a Nullable<int> and i know this is the latest code that we are working on in .NET 4.0 using C# 6 language in it.
modified 25-Jan-18 10:08am.
|
|
|
|
|
You could consider telling the senior dev about the .HasValue property; knowledge share.
Also, the correct English for "... an nullable ..." is "... a nullable ...".
|
|
|
|