|
|
If you make Run an extension method and rename it to IgnoreExceptions for clarity, you can say:
var s = (() => GetString(100)).IgnoreExceptions();
You can go one further and add another parameterized type for the catch's use to only ignore certain types of exceptions:
var s = (() => GetString(100)).Ignore<ArgumentException>();
|
|
|
|
|
Very interesting Nish,
I was puzzled by the omission of a Type argument to NoEx.Run, and realize that my habit of always writing out the Type arguments wasn't necessary in this case. I've made a note to try and find more information on exactly when the compiler can infer the Type which renders including the Type an option.
thanks !
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
|
|
|
|
|
As an idea I despite code that swallows exception without trace...
Also null sometimes your best friend (but not default), so why to eliminate!?
Skipper: We'll fix it.
Alex: Fix it? How you gonna fix this?
Skipper: Grit, spit and a whole lotta duct tape.
|
|
|
|
|
Kornfeld Eliyahu Peter wrote: I despite code
Quick Nitpick: that should be 'I despise code'. Despite means 'without being affected by; in spite of.', where despise means 'feel contempt or a deep repugnance for.'
What do you get when you cross a joke with a rhetorical question?
The metaphorical solid rear-end expulsions have impacted the metaphorical motorized bladed rotating air movement mechanism.
Do questions with multiple question marks annoy you???
|
|
|
|
|
|
To those of who still use pointers (even in .Net), using (*) might be a little confusing but I have an idea.
How about using a construct similar to the for loop
for (int i = 0; i < limit; ++i) { ... }
NoThrow (var <out>; Func<T>; <result on throw>);
string result;
NoThrow (result; dodgyApi.GetValue(); "I.M.Foo.Bar");
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
Too explicit. We need something that truly, deeply hides what's going on
cheers
Chris Maunder
|
|
|
|
|
If that's the end goal, just use a carrot (^) instead of equals. That way anyone the uses managed C++ is really hosed.
string result ^ dodgyApi.GetValue();
if (Object.DividedByZero == true) { Universe.Implode(); }
Meus ratio ex fortis machina. Simplicitatis de formae ac munus. -Foothill, 2016
|
|
|
|
|
Foothill wrote: To those of who still use pointers (even in .Net), using (*) might be a little confusing
And to those of us who use multiplication.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
"new" doesn't mean what you think it does.
|
|
|
|
|
Just something along the lines of a TryGetValue<T> Extension Method. :shrug:
|
|
|
|
|
You get my up-vote for the idea, but making the idea more general-purpose means, imho, not being able to use an Extension method with generics, since the 'this parameter of an Extension method cannot be declared 'ref, or 'out.
How about this (based on the code example in my previous reply to this thread)
using System;
namespace InMemoriamMaunder
{
public enum DodgyResult
{
ResultNull,
ResultOkay,
ResultError
}
public static class DodgyUtilities
{
public static DodgyResult TryGetValueFromDodgy<T1,T2>(T1 t1, ref T2 t2, Func<T1,T2> func)
{
try
{
t2 = func(t1);
if (t2 == null)
{
return DodgyResult.ResultNull;
}
else
{
return DodgyResult.ResultOkay;
}
}
catch (Exception)
{
return DodgyResult.ResultError;
}
}
}
}
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
|
|
|
|
|
No programming questions in the Lounge!
Chris Maunder wrote: Or am I setting a new standard for lazy, shameful programming here this hot, lazy afternoon?
Surely you jest! It's only 117° today, but we're supposed to warm up for the weekend.
Will Rogers never met me.
|
|
|
|
|
how about setting that as default for the whole app... you could use a constant like #ON_ERROR_RESUME_NEXT = true;
|
|
|
|
|
Why not make it a compiler flag that can be set once per file.
#pragma OnError ResumeNext
Did you ever see history portrayed as an old man with a wise brow and pulseless heart, waging all things in the balance of reason?
Is not rather the genius of history like an eternal, imploring maiden, full of fire, with a burning heart and flaming soul, humanly warm and humanly beautiful?
--Zachris Topelius
Training a telescope on one’s own belly button will only reveal lint. You like that? You go right on staring at it. I prefer looking at galaxies.
-- Sarah Hoyt
|
|
|
|
|
I just love to imagine the absolute mayhem such a pragma would allow.
cheers
Chris Maunder
|
|
|
|
|
Just NO!
#SupportHeForShe
Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson
You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun
|
|
|
|
|
Chris Maunder wrote: string result = DodgyApi.GetValue*();
What about
string result = DodgyApi.GetValue*(value);
as you don't always want the type default. Not sure how we define my value for reference types, maybe it could use the C# new type { prop1 = val1, ...} paradigm?
Anyway, no, bad idea. I want to fire people who silently swallow exceptions. At least, the code should be logging at some level, "hey, DodgyApi failed, using default value x" so that (in theory) somebody could investigate and make the api somewhat less dodgy.
|
|
|
|
|
Don't use DodgyApi directly.
string result = MyDodgyApiWrapper.GetValue();
Your wrapper can log any exceptions, provide a reasonable default value "Service unavailable. Try back later.", etc.
If a better backend evolves later, just update your wrapper.
|
|
|
|
|
Too much time on your hands?
|
|
|
|
|
cheers
Chris Maunder
|
|
|
|
|
Swallowing excepsions is bad style. If the function throws different exceptions, there may be strong need to react to them differently.
|
|
|
|
|
Hands down, this has to be the most hilarious computer article I’ve seen in a long time. Just look at the number one asked for qualification. If you really want a laugh, read the text of the article, and especially the first of the three big takeaways at the end of the article
Study of IT job postings on Indeed reveals trends important for all tech professionals[^]
Ya, this was in today's CodeProject daily news.
We can program with only 1's, but if all you've got are zeros, you've got nothing.
|
|
|
|
|
Awesome!
Customer service is over twice as important as attention to detail. So: it doesn't have to work - you just have to be really good at convincing them that this is normal.
Maybe next time they need to breakdown "IT" into smaller bits that author can chew on. That's like saying "Qualifications mentioned in Construction" and having a list like
- Draftsmanship
- Excavation
- Capital fund raising
- Truck maintenance
- Metallurgy
- Dirt
- Building things
cheers
Chris Maunder
|
|
|
|