Nó thực sự phụ thuộc vào việc bạn có biết nếu o
là 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à o
thực sự là một chuỗi, tôi thích (string)o
diễ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 as
toán tử, nếu o
không phải là một chuỗi, s
được đặt thành thuận null
tiệ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 s
sau 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 as
sẽ 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 o
không null và bạn nghĩ ToString
phương thức đó có thể làm những gì bạn muốn.