2010-05-20 35 views
12

Bạn sẽ nghĩ rằng sẽ có một cách sử dụng DirectCast, TryCast, CType vv nhưng tất cả trong số họ dường như nghẹt thở trên đó ví dụ:.NET có thể chuyển đổi "Có" & "Không" thành boolean nếu không có Nếu không?

CType("Yes", Boolean) 

Bạn nhận:

System.InvalidCastException - chuyển đổi từ chuỗi "Có" thành loại 'Boolean' không hợp lệ.

+1

với chuyển đổi hợp cụ thể;) – Stefan

+0

tạo bạn riêng struct :-) – philhobgen

+0

sử dụng các nhà điều hành ternary: p – kennytm

Trả lời

55

Nếu bạn nghĩ về nó, "vâng" không thể được chuyển đổi sang bool bởi vì nó là một ngôn ngữ và bối cảnh chuỗi cụ thể.

"Có" không đồng nghĩa với sự thật (đặc biệt là khi vợ của bạn nói điều đó ...!). Đối với những thứ như thế, bạn cần tự mình chuyển đổi nó; "Có" có nghĩa là "true", "mmmm yeeessss" có nghĩa là "một nửa sự thật, nửa sai, có lẽ", vv

+16

+1 cho người vợ và số còn lại – Jehof

+0

+1 cho người vợ bình luận –

+23

Bạn có nghĩa là chúng tôi đang thiếu một kiểu dữ liệu quan trọng WifeBoolean :) –

5

Không, nhưng bạn có thể làm như sau:

bool yes = "Yes".equals(yourString);

+0

Genius, đơn giản là thiên tài! –

2
private static bool GetBool(string condition) 
{ 
    return condition.ToLower() == "yes"; 
} 

GetBool("Yes"); // true 
GetBool("No"); // false 

Hoặc cách tiếp cận khác sử dụng phương pháp khuyến nông

public static bool ToBoolean(this string str) 
{ 
    return str.ToLower() == "yes"; 
} 

bool answer = "Yes".ToBoolean(); // true 
bool answer = "AnythingOtherThanYes".ToBoolean(); // false 
+1

Hãy cẩn thận của vỏ của đầu vào của bạn.Có thể sử dụng 'return (condition.ToUpper() ==" YES ")? true: false; 'thay vì – ZombieSheep

+0

Bạn nói đúng! +1 – sshow

+1

Thêm Zen boolean vào mã của bạn: return condition.ToLower() == "yes" – bniwredyc

19

Sử dụng cách này, bạn có thể xác định chuyển đổi từ bất kỳ chuỗi nào bạn muốn, với giá trị boolean bạn cần. 1 là đúng, 0 là sai, rõ ràng.
Lợi ích: Dễ dàng sửa đổi. Bạn có thể thêm bí danh mới hoặc xóa chúng dễ dàng.
Nhược điểm: Có lẽ sẽ mất nhiều thời gian hơn đơn giản nếu. (Tuy nhiên, nếu bạn có nhiều alises, nó sẽ nhận được lông)

enum BooleanAliases { 
     Yes = 1, 
     Aye = 1, 
     Cool = 1, 
     Naw = 0, 
     No = 0 
} 
static bool FromString(string str) { 
     return Convert.ToBoolean(Enum.Parse(typeof(BooleanAliases), str)); 
} 
// FromString("Yes") = true 
// FromString("No") = false 
// FromString("Cool") = true 
+0

Nếu bạn muốn nó có thể di chuyển văn hóa, bạn cũng có thể có một từ điển với một số giá trị, để bạn có thể đặt nó trong thời gian chạy. – Rubys

+1

+1, thông minh, dễ đọc, dễ bảo trì. – AMissico

+0

LOL, tôi thích ý tưởng được thiết kế quá mức này. – Gqqnbig

1

Hơi off topic, nhưng tôi cần một lần cho một trong các lớp học của tôi để hiển thị 'Có/Không' thay vì 'True/False 'trong lưới thuộc tính, vì vậy tôi đã triển khai YesNoBooleanConverter có nguồn gốc từ BooleanConverter và trang trí tài sản của tôi với <TypeConverter(GetType(YesNoBooleanConverter))> _ ...

1

Bạn không thể. Nhưng bạn nên sử dụng nó như

bool result = yourstring.ToLower() == "yes"; 
-2
Public Function TrueFalseToYesNo(thisValue As Boolean) As String 
    Try 
     If thisValue Then 
      Return "Yes" 
     Else 
      Return "No" 
     End If 
    Catch ex As Exception 
     Return thisValue.ToString 
    End Try 
End Function 
+2

Câu hỏi đặt ra là hỏi cách chuyển đổi '" Có "'/'" Không "thành' true'/'false', không phải cách khác. – Pang

Các vấn đề liên quan