|
Don't worry about it - we've all done it. You tend to read what you meant to write - or at least I do ...
Just be grateful that the C# compiler spots it - it was a whole load harder to find the problem at run time in C!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
modified 30-Apr-19 10:36am.
|
|
|
|
|
OriginalGriff wrote: C# has a concept of boolean values: true and false , C and C++ don't. Are you sure?
|
|
|
|
|
I'm trying not to confuse the newbie too much. Modern C++ does, but ... zero / non zero still works as well ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
How about the following in C:
int i = 5;
if (i == 5) {}
|
|
|
|
|
Not really - the == operator still returns zero / nonzero, as do all the other comparison operators.
if (i != 5) {} is the same as
if (i - 5) {} (and is normally executed as exactly that in machine code).
C# genuinely has boolean types - which internally use 0/1 - but which are the only types permitted as the result of a conditional statement.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
well, while you are here, see if you get some ideas from this, and see this for more ideas: [^]
int result = -1;
int converted = 0;
bool conversionok = false;
Console.WriteLine("Enter an integer, or 'stop'");
string input = Console.ReadLine();
if (input == "stop")
{
Console.WriteLine($"stopped: result = {result}");
}
else
{
conversionok = Int32.TryParse(input, out converted);
if (conversionok)
{
result = result + converted;
Console.WriteLine($"conversion ok: result = {result}");
}
else
{
Console.WriteLine($"conversion fail: result = {result}");
}
}
Console.ReadLine(); Yes, this code can be simplified; it is written out "more fully" here for educational purposes.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Quote: if(input = "stop"
I suspect you are coming over from Visual Basic, in which the equality test is pretty much the way you wrote it. In C#, the equality operator is == . Hence, your snippet should be as follows.
f(input == "stop")
{
Console.WriteLine(result);
}
else
{
converted = Convert.ToInt32(input);
result = result + converted;
<pre>
}</pre>
David A. Gray
Delivering Solutions for the Ages, One Problem at a Time
Interpreting the Fundamental Principle of Tabular Reporting
|
|
|
|
|
How to do round corner of text box , buttons, foam
in windows foam application in C#
|
|
|
|
|
You either buy a component-pack that does it, or you write custom drawing routines for your controls, using owner-drawing. We have articles on the subject if you search the site.
It would also mean that your app is no longer following the standard, and might not be as recognizable to the average user as the normal controls; I prefer the boring look, because it is recognizable and very predictable for the enduser.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Actually, you can do rounded corners without OwnerDraw/OnPaint via GraphicPath => Region easily. See my answer below.
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Cool, tx for sharing
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Use WPF / XAML (transparent background; rounded borders).
Everything else in Windows Forms is a hack.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
You can make any WinForm Control have "rounded corners" without custom painting (OwnerDraw).
1. create a Component that sub-classes the native Control.
1.a. add references:
using System.Drawing;
using System.Drawing.Drawing2D;
2. based on the Bounds of the Control, develop a Graphic Path of the desired shape.
3. set the Region of the Control to the Graphics Path.
There are many examples of how to do this on the web; here's a good one: [^].
For an example that does custom painting: your friend, CodeProject, has an excellent resource: [^].
«Where is the Life we have lost in living? Where is the wisdom we have lost in knowledge? Where is the knowledge we have lost in information?» T. S. Elliot
|
|
|
|
|
Hi there .
i am useing the following Code trying to get the maxValue from a list but it gives me an Exception (At least one object must implement IComparable) !
I need help to get a solution and explanation why this Exception
public static TheQFromDB GetMaxWithLINQ (List<TheQFromDB> input)
{
TheQFromDB GetItem = input.First();
foreach (var item in input)
{
var max = input.OrderByDescending(s=> s.SecondsDiff).Max();
GetItem = item;
}
return GetItem;
}
|
|
|
|
|
That's some odd code you have there.
For starters, max is a local variable and it is declared inside the foreach loop - so it's scope is limited to that loop: it cannot be accessed outside the loop, so it's pretty much useless.
Then there is the loop itself: that's useless as well, because your method will always return the same value - the last item in the input collection.
Then there is the linq code: why are you sorting your collection each time round the loop? The list can't change inside the loop (or you'd get an "collection modified" error at runtime) so the order is always the same.
Then there is the Max call - that is also useless as it will always return the same value since the collection still can't change inside the loop!
Then there is the error you have noticed: and that's because Max uses IComparable to work out the order of values, and your class TheQFromDB doesn't implement IComparable so Max can't compare any items to have any idea what is the maximum.
Probably what you want is
... input.Max(s => s.SecondsDiff); But that's just guesswork given that I know nothing about your classes or what that code is actually trying to do...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
First of all . i thank you for your Explanations. its more clear now .
In Fact what all i wanted to do is to get the maxValue from the difference among two Columns from SQL
TheQFromDB is holding some properties such as : DateTime AddedToQueue and DateTime LastStatusUpdate and a method to get the differenc between these two properties
i used now this Method and works very well you can indeed give me your opinion back
public static TheQFromDB GetMaxWithLINQ (List<TheQFromDB> input)
{
var max = input.OrderByDescending(s => s.SecondsDiff).First();
return max;
}
|
|
|
|
|
Why not just use Max with SecondsDiff?
Sorting the whole thing just to get the first item is a very inefficient way to get the max value ... and if this is sourced from a DB, you have no idea how many items you may be dealing with in a years time. Sort - even Quick Sort - is a complex operation, "what's the biggest?" is a single pass through the data.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
OriginalGriff wrote: Why not just use Max with SecondsDiff?
Probably because that would only return the SecondsDiff , not the whole object.
(See my reply to Maciej below[^].)
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
You get that exception because the TheQFromDB object has no built-in comparer to tell how two of these object compare to each other to determine order.
This code also looks like you're trying to generate your own "next highest" value. If that's the case, this code will not work in a multiuser environment.
|
|
|
|
|
Max() method does not need firstly to use OrderByDescending() method
var max = input.OrderByDescending(s=> s.SecondsDiff).Max();
A proper usage of Max() is:
TheQFromDB GetItem = input.Max(ele=> ele.SecondsDiff);
With this piece of code and no other details i can't help you more...
Good luck!
modified 30-Apr-19 2:31am.
|
|
|
|
|
Maciej Los wrote: So, why do you try to loop through... one element?
Um ... more needed?
TheQFromDB GetItem = input.First();
foreach (var item in input) He doesn't use the value he loads into GetItem.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Well... Good diagnosis. I was in a state of black-out.
|
|
|
|
|
We all get that ... I'm considering an intravenous drip ...
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|