2011-10-07 37 views
5

Tôi thấy this question nhưng nó sử dụng ?? nhà điều hành như một kiểm tra null, tôi muốn sử dụng nó như là một bool true/false test.Phiên bản Python của toán tử điều kiện C# (?)

tôi có mã này bằng Python:

if self.trait == self.spouse.trait: 
    trait = self.trait 
else: 
    trait = defualtTrait 

Trong C# Tôi có thể viết này như:

trait = this.trait == this.spouse.trait ? this.trait : defualtTrait; 

Có cách nào tương tự để làm điều này bằng Python?

+1

Trong C# bạn chỉ cần? nhà điều hành để làm điều đó. –

+0

Trong C# Có vẻ như bạn đang sử dụng ?? nhà điều hành nơi bạn có thể sử dụng không? nhà điều hành. Bất kể, nếu mã của bạn hoạt động, và bạn hiểu nó, tôi không thấy bất kỳ lý do gì để đi chệch. Nó rõ ràng và rõ ràng. Chắc chắn, bạn có thể biến nó thành một lớp lót như một số ít đã chứng minh, nhưng kết quả là có hiệu quả giống nhau. –

+0

@WinstonEwert bạn khá đúng. Lỗi của tôi. Tôi sẽ chỉnh sửa câu hỏi của mình để làm cho nó hữu ích cho người khác. –

Trả lời

10

Vâng, bạn có thể viết:

trait = self.trait if self.trait == self.spouse.trait else defaultTrait 

này được gọi là Conditional Expression bằng Python.

1

Trên toán tử không hợp nhất trong C#, những gì bạn có trong câu hỏi không phải là cách sử dụng chính xác. Điều đó sẽ thất bại trong thời gian biên dịch.

Trong C#, cách chính xác để viết những gì bạn đang cố gắng sẽ là:

trait = this.trait == this.spouse.trait ? self.trait : defaultTrait 

liên hiệp Null trong C# trả về giá trị đầu tiên mà không phải là null trong một chuỗi giá trị (hoặc null nếu không có giá trị không null). Ví dụ: những gì bạn muốn viết trong C# để trả về đặc điểm không null đầu tiên hoặc một đặc điểm mặc định nếu tất cả các giá trị khác là null:

trait = this.spouse.trait ?? self.trait ?? defaultTrait; 
+0

Phải, tôi đã suy nghĩ:? Điều hành có điều kiện và đã viết ra ?? toán tử không kết hợp. Lỗi của tôi. –

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