2012-08-16 30 views
30

Làm cách nào để viết một tuyên bố IF nội tuyến trong lớp dịch vụ C# khi đặt giá trị enum của tôi theo cơ sở dữ liệu được trả về?Tuyên bố IF nội tuyến trong C#

Ví dụ: Khi giá trị cơ sở dữ liệu được trả về là 1, sau đó đặt giá trị enum thành VariablePeriods, khi 2 thì FixedPeriods.

Hy vọng bạn có thể trợ giúp.

Trả lời

56

Câu trả lời theo nghĩa đen là:

return (value == 1 ? Periods.VariablePeriods : Periods.FixedPeriods); 

Lưu ý rằng câu lệnh if inline, giống như câu lệnh if, chỉ kiểm tra đúng hay sai. If (giá trị == 1) ước lượng là false, nó có thể không nhất thiết có nghĩa rằng giá trị == 2. Do đó nó sẽ được an toàn hơn như thế này:

return (value == 1 
    ? Periods.VariablePeriods 
    : (value == 2 
     ? Periods.FixedPeriods 
     : Periods.Unknown)); 

Nếu bạn thêm nhiều giá trị một inline nếu sẽ trở nên không thể đọc được và một chuyển đổi sẽ được ưu tiên:

switch (value) 
{ 
case 1: 
    return Periods.VariablePeriods; 
case 2: 
    return Periods.FixedPeriods; 
} 

Điều tốt về enums là chúng có giá trị, vì vậy bạn có thể sử dụng các giá trị cho ánh xạ, như được đề xuất bởi người dùng854301. Bằng cách này bạn có thể ngăn chặn các nhánh không cần thiết, do đó làm cho mã dễ đọc hơn và có thể mở rộng được.

+0

@Ysterhak: Rất vui được.Tôi vẫn tự hỏi tại sao bạn thích phân nhánh bằng cách sử dụng một diễn viên như đề xuất bởi user854301 – chiccodoro

4

Bạn có thể làm IFS inline với

return y == 20 ? 1 : 2; 

mà sẽ cung cấp cho bạn 1 nếu đúng và 2 nếu sai.

12

Bạn có thể xác định như enum của bạn như vậy và sử dụng đúc nơi cần thiết

public enum MyEnum 
{ 
    VariablePeriods = 1, 
    FixedPeriods = 2 
} 

Cách sử dụng

public class Entity 
{ 
    public MyEnum Property { get; set; } 
} 

var returnedFromDB = 1; 
var entity = new Entity(); 
entity.Property = (MyEnum)returnedFromDB; 
+0

như thế này bởi vì nó ngăn chặn sự phân nhánh. – chiccodoro

+0

Đã có điều này trong Lớp thực thể của tôi. Cần thiết lập Enum theo những gì được trả về từ DB trong lớp dịch vụ của tôi. Đó là lý do tại sao tôi cần phải làm một tuyên bố IF nội tuyến? – Landi

+0

Không, bạn có thể chỉ cần đặt thuộc tính bạn cần – user854301

0

Enum để int: (int)Enum.FixedPeriods

Int để Enum: (Enum)myInt