リファクタリングのためにリファクタリングしないでください。次のコード行が連続している場合
object o = new Building(4, "something");
Building c = o as Building;
それならぜひ変更してください
Building o = new Building(4, "something");
でもあなたが
public void SomeMethod(object o)
{
//you absolutely need a sanity check here
Building c = o as Building;
if( c == null )
{
//throw exception perhaps
}
//this can also be rewritten as
Building b = null;
if(o != null && o is Building)
b = (Building)o;
else
//throw exception or log..etc
}
次のことを試みた場合
if(o.GetType == typeof(Building))
Building buildingCast = o as Building;
次に、より冗長なものを作成します。実際、これによりコードが非常に読みにくくなります。次のようなことを行う必要があります。
Building buildingCast = null; //to be able to use outside the if
if(o.GetType() == typeof(Building))
buildingCast = o as Building;
//you still end up with a null here if cast fails.
//this is the EXACT procedure of the 'as' operator anyway
//which does
Building buildingCast = o is Building ? (Building)o : (Building)null;
..そしてもちろん、事前にチェックを使用してタイプが同じであることが絶対的に肯定的である場合、キャストは失敗しません。