This time I'd like to ask you how do you solve such a problem that there are few steps that have to be performed in a method but it's like a transaction, this means if one step fails the function returns false.

I know three ways how to do it. With the last one I just came up today and currenty it's my favourite. Here they are:

1:
Code:
bool DoSomething()
{
   bool success = false;
   try
   {
      if(DoSomethingElse1() == false)
         throw new Exception("Some description");

      // ... more code here

      if(DoSomethingElse2() == false)
         throw new Exception("Something else2 went wrong.");

      success = true;
   }
   catch(Exception ex)
   {
       // ...
   }
   finally
   {
       // ... some clean up etc.
   }
   return success;
}
Try/catch is a very clear way to do it, but the performance drops when the function gets called many times and it often fails.

2:
Code:
bool DoSomething()
{
   if(DoSomethingElse1() == false)
   {
      // .. do some clean up here etc.
      return false;
   }      

   // ... more code here

   if(DoSomethingElse2() == false)
   {
      // .. do some more clean up
      return false;
   }

   return true;
}
this one I think is quite fast but I have to clean up on each fail so it is lots of redundant code.

3:
Code:
bool DoSomething()
{
   bool success = false;
   do
   {
      if(DoSomethingElse1() == false)
         break;

      // ... more code here

      if(DoSomethingElse2() == false)
         break;

      success = true;
   }
   while(false); 

   // ... some clean up etc.

   return success;
}
so, this is my latest invention ;]

what do you think about all of them? have you other ways to do this kind of transaction in your code?