2008-09-18 33 views
21

Tôi đang sử dụng CodeDom để tạo mã động dựa trên giá trị của người dùng. Một trong những giá trị đó kiểm soát tên của lớp mà tôi tạo ra là gì. Tôi biết tôi có thể khử trùng tên dựa trên các quy tắc ngôn ngữ về các tên lớp hợp lệ sử dụng các biểu thức chính quy, nhưng tôi muốn biết nếu có một phương pháp cụ thể được xây dựng trong khung để xác nhận và/hoặc khử trùng tên lớp.Có một hàm .NET để xác thực tên lớp không?

Trả lời

25

Một cách dễ dàng để xác định xem một chuỗi là một định danh hợp lệ cho một lớp hoặc biến là để gọi phương thức tĩnh

System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value) 
2

Tôi đã tìm thấy câu trả lời cho câu hỏi của mình. Tôi có thể gọi

CodeCompiler.ValidateIdentifiers(class1); 

trong đó class1 là CodeObject để xác thực tất cả số nhận dạng trong cây CodeDom đó và bên dưới. Vì vậy, tôi có thể gọi nó ngay sau khi tôi tạo lớp CodeTypeDeclaration1 để xác thực tên lớp, hoặc tôi có thể xây dựng CodeDom và sau đó gọi nó ở cuối để xác nhận hợp lệ tất cả các mã định danh trong cây của tôi. Đúng thứ tôi cần!

7

Sử dụng phương pháp CreateValidIdentifier trên lớp CSharpCodeProvider.

CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName"); 
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName); 

Nó trả về tên hợp lệ cho một số đầu vào. Nếu bạn chỉ muốn xác nhận tên và không sửa nó, hãy so sánh đầu vào và đầu ra. Nó sẽ không thay đổi đầu vào hợp lệ để đầu ra sẽ tương đương.

+4

Tất cả điều này là để đổi tên một định nếu nó mâu thuẫn với một Ltd. từ. Nó không tạo một định danh hợp lệ nếu giá trị được truyền vào có các ký tự không hợp lệ trong nó. Vì vậy, điều này là hữu ích, nhưng không phải tất cả mọi thứ cần phải xảy ra trước khi bạn có thể tạo kiểu mã mới. – Zach

1
public static bool IsReservedKeyWord(string identifier) 
     { 
      Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider(); 
      return csharpProvider.IsValidIdentifier(identifier); 
     } 
Các vấn đề liên quan