Is this a right and effcient way of checking AND in a for loop
Currently, once you get ready to be false, all other checks after that will fail (as false &amp;&amp; condition2 will always be false).  

Why not just break out of the inner for loop when ET[k].Arg[z].Valid is false?  If ready is needed, you may keep the assignment line, but break when it's false.