2017-10-05 16 views
13

Ai đó có thể giúp tôi khai sáng?Cú pháp chuyển đổi không hợp lệ được xây dựng thành công?

Tôi đã đi kiểm tra một số thay đổi đối với TFS và việc đăng ký của tôi đã bị từ chối. Nó nhắc tôi xem xét một câu lệnh switch mà tôi đã chỉnh sửa.

Điều tôi thấy là Visual Studio 2017 tuyên bố không có vấn đề về thời gian biên dịch và cho phép tôi xây dựng và triển khai ứng dụng thành công. Ngày đầu đó, ngay cả các bài kiểm tra đơn vị cho các phương pháp dường như đi qua như dự định.

public enum PaymentStatus 
{ 
    Issued, 
    Cleared, 
    Voided, 
    Paid, 
    Requested, 
    Stopped, 
    Unknown 
} 

public class PaymentViewModel 
{ 
    public PaymentStatus Status { get; set; } 

    ... 

    public String StatusString 
    { 
     get 
     { 
      switch (this.Status) 
      { 
       case PaymentStatus.Cleared: 
        return "Cleared"; 
       case PaymentStatus.Issued: 
        return "Issued"; 
       case PaymentStatus.Voided: 
        return "Voided"; 
       case PaymentStatus.Paid: 
        return "Paid"; 
       case PaymentStatus.Requested: 
        return "Requested"; 
       case PaymentStatus.Stopped: 
        return "Stopped"; 
       case PaymentStatus Unknown: 
        return "Unknown"; 
       default: 
        throw new InavlidEnumerationException(this.Status); 
      } 
     } 
    } 
} 

Vì vậy, hãy lưu ý rằng dòng "case PaymentStatus Unknown" bị thiếu '.' toán tử dấu chấm. Như đã đề cập, dự án xây dựng và chạy; nhưng không thể đăng ký với máy chủ xây dựng có cổng.

Ngoài ra, lưu ý rằng các thử nghiệm sau đây được thông qua:

[TestMethod] 
public void StatusStringTest_Unknown() 
{ 
    var model = new PaymentViewModel() 
    { 
     Status = PaymentStatus.Unknown 
    } 

    Assert.AreEqual("Unknown", model.StatusString); 
} 

Dưới đây là một số hình ảnh cho thấy không có squigglies và nó thực sự xây dựng tốt: Switch-No-Compiler-Error

Và, phương pháp kiểm tra qua: Switch-Passing-Test

Cuối cùng, lưu ý rằng tôi đã chạy thử nghiệm chỉ với một chuỗi tĩnh thay vì sử dụng tệp tài nguyên và nó chuyển. Tôi chỉ cần bỏ qua các tập tin tài nguyên công cụ vì lợi ích của sự đơn giản trong đoạn mã trên.

Bất kỳ suy nghĩ nào về điều này được đánh giá cao nhất! Cảm ơn trước!

Trả lời

11

này biên dịch vì Visual Studio của bạn giải thích PaymentStatus Unknown như một mô hình kết hợp, mà là một new feature của C# 7:

  • PaymentStatus là loại,
  • Unknown là tên,
  • Không điều kiện (tức là mẫu luôn phù hợp).

Trường hợp mục đích sử dụng cho các cú pháp này là một cái gì đó như thế này:

switch (this.Status) { 
    case PaymentStatus ended when ended==PaymentStatus.Stopped || ended==PaymentStatus.Voided: 
     return "No payment for you!"; 
    default: 
     return "You got lucky this time!"; 
} 

Nếu TFS được thiết lập để sử dụng một phiên bản cũ của C#, nó sẽ từ chối nguồn này.

Lưu ý: Lý do kiểm tra đơn vị của bạn hoạt động là các trường hợp còn lại đều được thực hiện chính xác. Tuy nhiên, một trường hợp thử nghiệm cho việc ném InavlidEnumerationException(this.Status) sẽ thất bại, vì công tắc sẽ giải thích mọi giá trị không xác định là, tốt, PaymentStatus.Unknown.

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