2015-04-13 14 views
7

Khi cố gắng sử dụng hằng số trong ứng dụng C# này. Khi tôi chạy qua gỡ rối, hằng đi lên như một "không rõ nhận dạng" Heres mãSố nhận dạng không xác định khi sử dụng hằng số C#

public static class ConstsConfig 
{ 
    public static string BASE_URL_FORMAT = "%s://%s%s"; 
} 

public static class NetworkConfig 
{ 
    public static string PROTOCOL = "http"; 
    public static string HOST = "www.example.com"; 
    public static string BASE_URL = "/test"; 
} 

Đây là dòng mã mà nó không đánh giá nó có vẻ như

Uri uri = new Uri(String.Format(ConstsConfig.BASE_URL_FORMAT, NetworkConfig.PROTOCOL, NetworkConfig.HOST, NetworkConfig.BASE_URL))); 

Vì vậy, khi tôi bước qua trình gỡ lỗi và ngắt dòng này. Nếu bạn ho lên một trong các hằng số. Nó chỉ nói "Số nhận dạng không xác định ConstsConfig" hoặc "Mã định danh Uknown NetworkConfig"

Tôi sẽ hình dung ra một thứ gì đó nhỏ bé. Cảm ơn đã giúp đỡ trước.

+1

Trình gỡ lỗi trực tiếp của trình gỡ lỗi có thể phức tạp. Dù sao, nếu không có * biên dịch lỗi * hoặc * ngoại lệ * thì mã hoạt động, bất kể 'eval trực tiếp'. – user2864740

+0

Công ước trong C# là ** không ** để cung cấp cho các hằng số các tên viết hoa, cũng nếu các giá trị này có nghĩa là các giá trị bất biến, sau đó sử dụng 'chuỗi công khai const' hoặc' chuỗi chỉ đọc tĩnh công cộng'. – Dai

+0

Âm thanh như một sự cố với trình gỡ rối. Tôi khuyên bạn nên chỉ cần làm sạch sẽ và/hoặc khởi động lại VS. Trình gỡ lỗi của bạn móc vào mã của bạn trong thời gian chạy, nó có thể có vấn đề tương quan với IL với nguồn của bạn, điều đó không có nghĩa là có bất kỳ điều gì sai với nguồn. – evanmcdonnal

Trả lời

9

Có một vấn đề gỡ lỗi lâu dài trong Xamarin.Android với Visual Studio liên quan đến việc kiểm tra các giá trị trong các lớp tĩnh. Cụ thể, nếu bạn đặt một điểm ngắt trên một dòng tham chiếu một lớp tĩnh (hoặc một lớp không tĩnh với các thành viên tĩnh), Visual Studio có thể hiển thị giá trị kiểm tra là "Số nhận dạng không xác định: [ClassName]".

Từ phân tích của tôi, nó chỉ ra rằng vị trí của tệp lớp trong dự án xác định liệu bạn có gặp vấn đề đó hay không.

Bản cập nhật cho tôi là, cho đến khi Xamarin sửa lỗi, tất cả các lớp tĩnh và lớp có thành viên tĩnh, phải được đặt trong thư mục gốc của dự án. Có các tùy chọn vị trí tệp khác, nhưng một số tùy chọn không hoạt động và một yêu cầu hoàn toàn đủ điều kiện cho cuộc gọi lớp tĩnh của bạn với không gian tên - ngay cả khi không được trình biên dịch yêu cầu.

Xem nhận xét bằng mã bên dưới để biết chi tiết đầy đủ.

MainActivity.cs

using System; 
using Android.App; 
using Android.OS; 

namespace App1 { 

[Activity(Label = "Unknown Identifier Test", MainLauncher = true)] 
public class MainActivity : Activity {   

    protected override void OnCreate(Bundle bundle) { 
     base.OnCreate(bundle); 

     Console.WriteLine(MyClass.MyString);   // Unqualified 
     Console.WriteLine(App1.MyClass.MyString);  // Fully Qualified with namespace 

     /* 
     Set a break point on the "Console.WriteLine()" lines above and you'll get the 
     "Unknown identifier: MyClass" error when trying to inspect under specific conditions... 

     File Locations          Unqualified    Fully Qualified 
     ------------------------------------------------- --------------------- -------------------- 
     MainActivity.cs in root, MyClass.cs in sub-folder "Unknown identifier" Inspection Works 
     MainActivity.cs in sub-folder, MyClass.cs in root Inspection Works  Inspection Works 
     Both in root          Inspection Works  Inspection Works 
     Both in different sub-folders      "Unknown identifier" "Unknown identifier" 
     Both in same sub-folder        "Unknown identifier" "Unknown identifier" 
     */ 
    } 
} 
} 

MyClass.cs

namespace App1 { 
public static class MyClass { 
    public static string MyString; 
} 

// The class can also be constructed this way, which results in the same findings: 
//public class MyClass { 
// public static string MyString; 
//}  
} 

On 2016/04/03, tôi cập nhật vé với thông tin này liên quan Xamarin Bugzilla. Hy vọng rằng họ sẽ sớm giải quyết vấn đề này.

+1

Cảm ơn vì điều này, bây giờ là tháng 8 và lỗi vẫn còn tồn tại! – Sherlock

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