OK, đổi thành câu trả lời trước. Vì có chuyển đổi tiềm ẩn từ Int64
đến Double
(nhưng không phải ngược lại), đó sẽ là loại kết quả của biểu thức. Vì vậy, khi bạn mong đợi để có được một đóng hộp Int64
, bạn thực sự nhận được một đóng hộp Double
(nhưng với một giá trị ban đầu đến từ Int64.Parse
).
Chỉ trong trường hợp không đủ rõ ràng, hãy thay đổi tất cả câu lệnh return
sao cho chúng chỉ trả về một biến. Dưới đây là mã gốc:
private static object ParseNumber(string token, FieldDefinition def)
{
if (def.Fraction > 0)
return Double.Parse(token);
else
return Int64.Parse(token);
}
Chuyển đổi đó một cách thích hợp:
private static object ParseNumber(string token, FieldDefinition def)
{
if (def.Fraction > 0)
{
double d = Double.Parse(token);
object boxed = d; // Result is a boxed Double
return boxed;
}
else
{
long l = Int64.Parse(token);
object boxed = l; // Result is a boxed Int64
return boxed;
}
}
Và bây giờ chúng ta hãy làm điều tương tự với phiên bản với các nhà điều hành có điều kiện:
private static object ParseNumber(string token, FieldDefinition def)
{
return def.Fraction > 0 ? Double.Parse(token) : Int64.Parse(token);
}
trở thành
private static object ParseNumber(string token, FieldDefinition def)
{
// The Int64.Parse branch will implicitly convert to Double
double d = def.Fraction > 0 ? Double.Parse(token) : Int64.Parse(token);
object boxed = d; // *Always* a Double
return boxed;
}
EDIT: Như reque sted, một chút thông tin. Các loại của một biểu thức điều kiện của mẫu
X ? Y : Z
phụ thuộc vào loại Y
và Z
, mà tôi sẽ gọi TY
và TZ
. Có một vài lựa chọn:
TY
và TZ
là cùng loại: kết quả là kiểu đó
- Có một chuyển đổi ngầm từ
TY
để TZ
nhưng không phải từ TZ
để TY
: kết quả là loại TZ
và chuyển đổi được sử dụng nếu chi nhánh đầu tiên được sử dụng.
- Có chuyển đổi tiềm ẩn từ
TZ
đến TY
nhưng không phải từ TY
đến TZ
: kết quả là loại TY
và chuyển đổi được sử dụng nếu chi nhánh thứ hai được sử dụng.
- Có một chuyển đổi ngầm ở cả hai hướng: thời gian biên dịch lỗi
- Không có chuyển đổi trong hai cách: thời gian biên dịch lỗi
Điều đó giúp đỡ?
Nguồn
2009-03-09 17:26:12
http://cznp.com/s/7JM –