Nó thực sự phụ thuộc vào việc bạn có biết nếu olà một chuỗi và những gì bạn muốn làm với nó. Nếu nhận xét của bạn có nghĩa là othực sự là một chuỗi, tôi thích (string)odiễn viên thẳng - không chắc là thất bại.
Ưu điểm lớn nhất của việc sử dụng dàn diễn viên thẳng là khi nó thất bại, bạn nhận được một UnlimitedCastException , điều này cho bạn biết khá nhiều điều đã xảy ra.
Với astoán tử, nếu okhông phải là một chuỗi, sđược đặt thành thuận nulltiện nếu bạn không chắc chắn và muốn kiểm tra s:
string s = o as string;
if ( s == null )
{
// well that's not good!
gotoPlanB();
}
Tuy nhiên, nếu bạn không thực hiện kiểm tra đó, bạn sẽ sử dụng ssau và ném NullReferenceException . Những xu hướng phổ biến hơn và nhiều khó khăn hơn để theo dõi xuống một khi họ xảy ra trong môi trường tự nhiên, như hầu hết các dòng dereferences một biến và có thể ném một. Mặt khác, nếu bạn đang cố gắng chuyển sang loại giá trị (bất kỳ cấu trúc nguyên thủy hoặc cấu trúc nào như DateTime ), bạn phải sử dụng truyền thẳng - công việc assẽ không hoạt động.
Trong trường hợp đặc biệt chuyển đổi thành một chuỗi, mọi đối tượng đều có một ToString, vì vậy phương thức thứ ba của bạn có thể ổn nếu okhông null và bạn nghĩ ToStringphương thức đó có thể làm những gì bạn muốn.