Cách chuyển đổi “0” và “1” thành false và true


90

Tôi có một phương pháp đang kết nối với cơ sở dữ liệu qua Odbc. Thủ tục được lưu trữ mà tôi đang gọi có giá trị trả về từ phía cơ sở dữ liệu là 'Char'. Ngay bây giờ tôi đang lấy giá trị trả về đó dưới dạng một chuỗi và sử dụng nó trong một câu lệnh if đơn giản. Tôi thực sự không thích ý tưởng so sánh một chuỗi như thế này khi chỉ có hai giá trị có thể quay trở lại từ cơ sở dữ liệu, 0 và 1.

OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn);

fetchCommand.CommandType = CommandType.StoredProcedure;
fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter);
fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1)
            .Direction = ParameterDirection.Output;
fetchCommand.ExecuteNonQuery();

string returnValue = fetchCommand.Parameters["@myReturnValue"].Value.ToString();
if (returnValue == "1")
{
    return true;
} 

Đâu sẽ là cách thích hợp để xử lý tình huống này. Tôi đã thử 'Convert.ToBoolean ()' có vẻ như là câu trả lời rõ ràng nhưng tôi gặp phải 'Chuỗi không được công nhận là Boolean hợp lệ. 'ngoại lệ bị ném. Tôi có thiếu một cái gì đó ở đây, hay có cách nào khác để làm cho '1' và '0' hoạt động như đúng và sai?

Cảm ơn!

Câu trả lời:


156

Làm thế nào về:

return (returnValue == "1");

hoặc như đề xuất bên dưới:

return (returnValue != "0");

Một trong những chính xác sẽ phụ thuộc vào những gì bạn đang tìm kiếm như một kết quả thành công.


9
Chính xác? Kiểm tra; Ngắn gọn? Kiểm tra; Thanh lịch? Kiểm tra. +1.
Earlz

11
Tôi muốn khuyên bạn nên sử dụng return (returnValue!="0"). Nó sẽ tự nhiên hơn mà 0falsevà mỗi con số đó không phải là zero là true. Tất nhiên ở đây chúng tôi có trường hợp Chris sử dụng chuỗi thay vì số, vì vậy nhận xét này chỉ có giá trị một phần;)
Gacek

Nó luôn luôn là một cuộc tranh luận. 0 cũng có nghĩa là ERROR_SUCCESS có nghĩa là mọi thứ diễn ra tốt đẹp. Nhưng tôi đồng ý với Gacek rằng nó tự nhiên hơn.
Lễ hội Pierre-Alain

3
Đừng quên kiểm tra null: string.IsNullOrEmpty (returnValue) && (returnValue == "1")
csharpforevermore

2
tại sao không Convert.ToBoolean (1)? Nó làm tương tự và bạn đang sử dụng khuôn khổ để kiểm tra. Tôi cũng thích câu trả lời ở trên, nhưng cái nào tốt hơn nên được sử dụng?
user20358

105

Trong một dòng mã:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))

3
Tôi thích phiên bản của bạn Chris vì như câu hỏi đã nêu, hãy sử dụng boolean thay vì so sánh các chuỗi.
Svet

Tôi cũng thích phiên bản của bạn hơn vì nó truyền đạt ý định rõ ràng hơn.
BornToCode

Nó chỉ thích hợp cho "1" hoặc "0". Đối với bất kỳ giá trị chuỗi lợi nhuận khác là không xác định, ví dụ như "101" là đúng và vân vân ...
szubajak

12

Nếu bạn muốn chuyển đổi luôn thành công, có lẽ cách tốt nhất để chuyển đổi chuỗi là xem xét "1"như truevà bất kỳ thứ gì khác như false(như Kevin). Nếu bạn muốn chuyển đổi không thành công nếu bất kỳ điều gì khác ngoài "1"hoặc "0"được trả về, thì điều sau là đủ (bạn có thể đặt nó trong một phương thức trợ giúp):

if (returnValue == "1")
{
    return true;
}
else if (returnValue == "0")
{
    return false;
}
else
{
    throw new FormatException("The string is not a recognized as a valid boolean value.");
}

Ý tưởng tốt để nắm bắt giá trị chưa được công nhận. Không chắc tôi muốn đi theo cách đó, nhưng vẫn là một ý kiến ​​hay.
Chris

5

Đặt kiểu trả về thành số - bạn không cần ký tự (vì vậy đừng sử dụng nó); một giá trị số (0/1) có thể được chuyển đổi bằng Convert.ToBoolean (num)

Nếu không: sử dụng câu trả lời của Kevin


Tôi ước rằng chúng ta có thể thay đổi kiểu trả về. Nhưng chúng tôi bị mắc kẹt với những gì nó là.
Chris

10
Convert.ToBooleanchấp nhận chuỗi chỉ True / đúng / sai / sai
Yaro

4

Bạn có thể sử dụng biểu mẫu đó:

return returnValue.Equals("1") ? true : false;

Hoặc đơn giản hơn (cảm ơn Jurijs Kastanovs):

return returnValue.Equals("1");

7
Chỉ mất bit "? True: false". Nó hoàn toàn không cần thiết. Để lại lúc {return returnValue.Equals ("1")}
Jurijs Kastanovs,

2

Hoặc nếu giá trị Boolean không được trả về, bạn có thể làm như sau:

bool boolValue = (returnValue == "1");

1

Giải pháp của tôi (vb.net):

Private Function ConvertToBoolean(p1 As Object) As Boolean
    If p1 Is Nothing Then Return False
    If IsDBNull(p1) Then Return False
    If p1.ToString = "1" Then Return True
    If p1.ToString.ToLower = "true" Then Return True
    Return False
End Function


-1

Nếu bạn không muốn chuyển đổi. Chỉ cần sử dụng;

 bool _status = status == "1" ? true : false;

Có lẽ bạn sẽ trả về các giá trị như bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.