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
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)
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!
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.
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}
- 1. Java - thực tế là không có một hàm tạo lớp?
- 2. Một lớp có nên tự xác nhận hoặc tạo một lớp khác để xác thực không?
- 3. Xác thực WebApi .NET
- 4. Trong .NET có thể một lớp có hàm tạo ảo không?
- 5. Xác thực tên mạnh Không thành công
- 6. Có thể sử dụng Protobuf-Net với một lớp không có một hàm tạo tham số không?
- 7. Có đúng là một hàm tạo mặc định được tổng hợp cho mọi lớp không xác định một lớp không?
- 8. Làm cách nào để xác thực biểu đồ lớp cho một tên miền cụ thể?
- 9. Tôi có thể nhận log4net để nối thêm tên lớp thực và không phải tên lớp đóng được tạo không?
- 10. .NET JIT có phải là một hàm nhỏ gọi một hàm nhỏ khác không?
- 11. Làm thế nào để bạn xác định không gian tên của một hàm?
- 12. hàm gọi lua từ một chuỗi có tên hàm
- 13. PHP có cho phép các hàm và thuộc tính lớp chia sẻ cùng một tên không?
- 14. Cách xác thực LDAP trong .NET
- 15. Xác thực Windows trong .NET
- 16. Làm cách nào để xác thực thông tin xác thực tên miền (từ mã gốc)?
- 17. Xác thực Java xsd của xml không có vùng tên
- 18. Tên liên tục không xác định của RubyMỗi tên lớp
- 19. Mục đích của tham số có tên "không xác định" trong một hàm JavaScript là gì?
- 20. PHP - xác định các lớp bên trong một hàm
- 21. Có cách nào để lấy tên hàm PowerShell từ bên trong một hàm không?
- 22. Nhập hàm/lớp từ mô-đun Python có cùng tên
- 23. Javascript regex để xác thực tên tệp
- 24. Có thể thay thế một hàm trong lớp PHP không?
- 25. Làm cách nào để tìm ra ngoại lệ có thể bị hàm .NET thực hiện?
- 26. Regex để xác thực tên tệp
- 27. Xác định xem một lớp có thực hiện một giao diện rất cụ thể hay không
- 28. Liệu một hàm tạo hoặc hàm hủy 'rỗng' có thực hiện tương tự như một hàm tạo ra không?
- 29. C# in tên lớp từ trong một hàm tĩnh
- 30. Tắt xác thực trong @ Html.TextBoxFor trong .Net
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