That's what version control systems are for, otherwise you'll end up with "FILE1-final.cs", "FILE1-final2.cs", "FILE1-reallyfinal.cs" and so on. Keep your code in one file, and use a system that records the editing history of that file.
Currently Git is hip and happening, alternatives are Mercurial and Team Foundation Server.
That being said, you can have only one startup method in a project, and it is cumbersome to change this method every time you want to test your code.
If you're experimenting with different implementations of a class, then simply instantiate the appropriate class.
You can let these implementations implement an interface so you can refer to them through one variable:
public class Program
{
public static void Main()
{
IImplementation implementation = new Impl1();
//IImplementation implementation = new Impl2();
//IImplementation implementation = new Impl3();
Console.WriteLine(implementation.Foo());
}
}
public interface IImplementation
{
string Foo();
}
public class Impl1 : IImplementation
{
public string Foo()
{
return "Foo";
}
}
public class Impl2 : IImplementation
{
public string Foo()
{
return "F" + "o" + "o";
}
}
public class Impl3 : IImplementation
{
public string Foo()
{
return string.Concat("F", "o", "o");
}
}