|
The specifications concerning the behavor of postfix and prefix increment aren't relavent. The result should be 6 either way!
i = i++;
i gets assigned 5 and then i gets incremented. Therefore i = 6.
|
|
|
|
|
Wjousts wrote:
i gets assigned 5 and then i gets incremented. Therefore i = 6.
That's not the normal execution order.
The real execution order (in C#) is:
Read value of i
Increment i
Assign old value of i to i
Why should the "++" wait until after the assignment? It directly binds to "i":
AssignmentExpression: Left=i Op=Assign Right=[UnaryExpression: Op=PostIncrement Expr=i]
It behaves differently in C++ because C++ has very strange rules for execution order.
|
|
|
|
|
Wjousts wrote:
The specifications concerning the behavor of postfix and prefix increment aren't relavent.
WHAT?! Then why have a language specification at all? They detail the inner workings of the instruction set and execution order.
According to the C/C++ language specifications, the value should be 6. Stop applying C/C++ specifications to C#.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave Kreskowiak wrote:
WHAT?! Then why have a language specification at all? They detail the inner workings of the instruction set and execution order.
Not relevant to this problem.
You are still not getting this. i++ is logically equavalent to i=i+1 correct? If i do i=i+1 I should get the same value in i as I would if I just did i++, correct? So then:
<br />
int i = 5;<br />
i = i++;<br />
should give the same result as:
<br />
int i = 5;<br />
i = i;<br />
i = i + 1;<br />
Correct? Therefore i should equal 6. Show me where the flaw is? Both the assignment and the increment have to happen before the code has finished executing therefore it really doesn't matter which one happens first.
Compare these:
<br />
int i = 5;<br />
i++;<br />
Console.Writeline(i.ToString());<br />
<br />
int i = 5;<br />
++i;<br />
Console.Writeline(i.ToString());<br />
What's the output in both cases? Would you agree that the postfix or prefix notation doesn't change the output in this case?
|
|
|
|
|
Wjousts wrote:
i++ is logically equavalent to i=i+1 correct?
No, it's not! i++; is equivilent to i=i+1 . Your flaw is not understand the execution order of the operators and assignments you're using. This works like you want it to:
int i = 5;
i++;
Console.WriteLine(i.ToString());
You're not understanding the procedures, order, and times in which each operation takes place. It's already been explained to you in the C# Language Specifications.
Wjousts wrote:
Would you agree that the postfix or prefix notation doesn't change the output in this case?
It's not the operators that are changing the output. It's, again, the execution order and times of the operators in question. What do you think the output of these are?:
int i = 5;
Console.WriteLine((i++).ToString());
int i = 5;
Console.WriteLine((++i).ToString());
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave Kreskowiak wrote:
Wjousts wrote:
i++ is logically equavalent to i=i+1 correct?
No, it's not! i++; is equivilent to i=i+1.
So no, you agree???
You're still missing the point. First, this wasn't my question. i = i++ is redudant and a silly thing to try and do in the first place! The point is that in that statement that the original poster posted the incremement part, the i++ is NEVER EXECUTED. Where in the C# specification does it say that the compiler will randomly ignore increment statements whenever it feel like it? Please so me the exact section that says that.
It's not an issue of execution order because ALL THE STATEMENTS ARE SUPPOSED TO BE EXECUTED!
|
|
|
|
|
Wjousts wrote:
No, it's not! i++; is equivilent to i=i+1.
So no, you agree???
Whoops! My typeo. i++ is equivelent to i=i+1 . But, that not what i=i++; is saying.
Wjousts wrote:
It's not an issue of execution order because ALL THE STATEMENTS ARE SUPPOSED TO BE EXECUTED!
Yeah, all the statements are supposed to be executed, DUH! The problem is in which order the various PIECES of those statements are executed!
Want proof of the execution order of the expression? One more time...
int i = 5;
Console.WriteLine((i++).ToString()); ' Result: 5
int i = 5;
Console.WriteLine((++i).ToString()); ' Result: 6
I understand perfectly what the code is doing and I know exactly why it's coming up with the results it is. It's your argument that I don't get.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave Kreskowiak wrote:
Whoops! My typeo. i++ is equivelent to i=i+1. But, that not what i=i++; is saying.
Huh
One more time:
<br />
int i = 5;<br />
Console.WriteLine((i++).ToString()); ' Result: 5<br />
Console.WriteLine(i).ToString(); // Result: 6<br />
<br />
int i = 5;<br />
Console.WriteLine((++i).ToString()); ' Result: 6<br />
Console.WriteLine(i).ToString();
You need to look at the value of i AFTER both commands have been executed, that is what you are still not seeing.
In fact, have you even looked at the IL generated by the original code?
<br />
.locals init ([0] int32 i)<br />
IL_0000: ldc.i4.5
IL_0001: stloc.0
<br />
IL_0002: ldloc.0
IL_0003: dup
IL_0004: ldc.i4.1
IL_0005: add
IL_0006: stloc.0
IL_0007: stloc.0
This is the "strange" code the original poster referred to and you can see that it is indeed confused. My best intepretation of what it is trying to do is that it actually does the increment FIRST and then it does the assignment, but with the old value of i instead of the new value. That is why this is a bug. This isn't what it supposed to happen according to the language specification. Compare it to the IL from C++:
<br />
.locals init ([0] int32 i)<br />
IL_0000: ldc.i4.5<br />
IL_0001: stloc.0
<br />
IL_0002: ldloc.0
IL_0003: stloc.0
<br />
IL_0004: ldloc.0
IL_0005: ldc.i4.1
IL_0006: add
IL_0007: stloc.0
The C# compiler should generate the basically the same IL as C++ as doesn't.
-- modified at 5:21 Tuesday 27th September, 2005
|
|
|
|
|
Wjousts wrote:
You need to look at the value of i AFTER both commands have been executed, that is what you are still not seeing.
I'm looking at the value of i before the expression is evaluated, DURING THE EXPRESSION EVALUATION, AND after! And, I',m paying attention to the language specification that describes how each language evaluates and executes it's statements and expressions.
You're not. You just see the exact same syntax in two different languages and assume that they MUST work exactly the same and generate the exact same code and results. NOTHING could be further from the truth! Stop equating C# to C++! They are NOT the same!
Wjousts wrote:
In fact, have you even looked at the IL generated by the original code?
Yes, I have. And the code generated follow the C# language specification exactly. No surprise here. It does NOT, on the other hand, match the C++ language specification. No surprise here either...
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave Kreskowiak wrote:
I'm looking at the value of i before the expression is evaluated, DURING THE EXPRESSION EVALUATION, AND after!
No your not. Look at the original question. The question asked what is the value of i AFTER the code (all of it) has been executed.
Dave Kreskowiak wrote:
I',m paying attention to the language specification
Where in the specification does it say that i++ does nothing?
|
|
|
|
|
Wjousts wrote:
No your not. Look at the original question. The question asked what is the value of i AFTER the code (all of it) has been executed.
In order to explain WHY the result of the expression is what it is, you have to look at how the expression is evaluated. This is covered in the language specs and by looking at the IL.
Wjousts wrote:
Where in the specification does it say that i++ does nothing?
I never said it "did nothing". Where on earth did you get this?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
So it does... It looks like your right. So what's the point of all this?
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
how could i get machine names on network and show?
|
|
|
|
|
hi there,
take a look on this article:
http://www.codeproject.com/csharp/CompPickerLib.asp
this might give u an idea.
Hope this helps
<< >>
|
|
|
|
|
in a rich Textbox i wanna show some words as link (for example when u write www.codeproject.com , u see a web link ) but I wanna do the same for some words. After that I have to catch , this link whether is clicked or not.
How can I do ?
|
|
|
|
|
hi there,
this article might give u an idea on this
http://www.codeproject.com/cs/miscctrl/RichTextBoxLinks.asp
Hope this helps
<< >>
|
|
|
|
|
Hello Everybody,
Saving strings to files as i know it(from VB6) was similar to this:
struct string
{
int length;
chr str[length];
}
But in C# saving to files is through streaming(correct me if i am wrong) and they only accept arrays of bytes. Okay, I can convert a string to that, but it would be helpful if i didn't have to convert every single integer/long manually.
Anybody has an idea about doing this?
note: Serializing is not an option
|
|
|
|
|
(1) Can i move ONE (or two or three) instance(s) of a group of objects to a fixed or moving point? And how do you do that then?
(2)Can i redraw objects in the order of their Y value? And again how?
(3) I i have a large 'room' say, 500 by 500, can i make a view that shows 100 by 100 of the room that you can move around?
(4) Guess what im makin';P
|
|
|
|
|
2, get the Y value of the item, and then use refres();
3, use scrollbars...
Niklas Ulvinge aka IDK
|
|
|
|
|
i made the following stored procedure
CREATE procedure databasecreation (@a varchar(20))
AS
declare @strquery varchar(1000)
SET @strquery = 'create database '+@a+ ''
EXEC (@strquery)
ALTER procedure databasedeletion(@a varchar(20))
AS
declare @strquery varchar(1000)
SET @strquery = 'DROP database '+@a+ ''
EXEC (@strquery)
when executing it in front end C#
code;-
SqlConnection c = new SqlConnection("server=dbasvr03;uid=sa;pwd=sa;database=banking");
private void button1_Click(object sender, System.EventArgs e)
{
String databasename;
databasename =textBox1.Text;
c.Open();
SqlDataAdapter MyDataAdapter= new SqlDataAdapter("databasecreation ", c); MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@a",
SqlDbType.VarChar,20));
MyDataAdapter.SelectCommand.Parameters["@a"].Value = databasename;
MyDataAdapter.SelectCommand.ExecuteNonQuery();
Console.WriteLine("DATABASE CREATED");
c.Close();
}
AT EXECUTION THE FOLLOWING ERROR COMES-
databasecreation error: identifier 'databasecreation' out of scope
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in system.data.dll
PLEASE GIVE A SOLUTION
|
|
|
|
|
Problem will be there in your stored procedure.
You are trying to alter the procedure on it's definision block itself.
Best way to do this, may split your procedure into two stored procedures.
Sreejith Nair
[ My Articles ]
|
|
|
|
|
how do i bind tablestyle back to datatable after datagrid invoke.
when im updating datagrid with invoke ..
private void UpdateGrid(DataSet table)
{
dataGrid1.DataSource=table.Tables["data"];
}
dataGrid1.Invoke(new UpdateGridCallback(this.UpdateGrid),
new object[]{some_data_set});
..i lose datagrid style which is already defined.
bye
-- modified at 3:56 Friday 23rd September, 2005
|
|
|
|
|
Through DataGrid.TableStyles proerty you will get the table style which you assigned to the Datagrid.
Sreejith Nair
[ My Articles ]
|
|
|
|
|
ok i solved that, but what if i invoke more times. First time its working ok, when i do it second time, datagrid get screwed and starts to blink.
im trying to use threads to update datagrid form dataset.
and suggestions
|
|
|
|
|
You try to assign the Table style property to null , then try to assign the second required table stayle property.
Sreejith Nair
[ My Articles ]
|
|
|
|