Kullanıcı değerlerine dayalı dinamik kod oluşturmak için CodeDom kullanıyorum. Bu değerlerden biri, üretmekte olduğum sınıfın adının ne olduğunu kontrol eder. İsmi, normal ifadeleri kullanarak geçerli sınıf adlarına ilişkin dil kurallarına dayalı olarak sterilize edebildiğimi biliyorum, ancak bir sınıf adını doğrulamak ve/veya sterilize etmek için çerçeveye yerleşik belirli bir yöntem olup olmadığını bilmek istiyorum.Sınıf adını doğrulamak için bir .NET işlevi var mı?
cevap
bir dize, bir sınıf veya değişken için geçerli bir tanımlayıcı olup olmadığını belirlemek için kolay bir yol statik yöntemini
System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string value)
Soruma bir yanıt buldum. sınıfı1 o CodeDom ağacı ve aşağıda tüm tanımlayıcıları doğrulamak için bir CodeObject nerede olduğunu
CodeCompiler.ValidateIdentifiers(class1);
çağırabilir. Bu yüzden, sadece sınıf adını doğrulamak için CodeTypeDeclaration class1'i oluşturduktan sonra bunu hemen arayabilirim veya CodeDom'umu oluşturabilirim ve sonra ağacımdaki tüm tanımlayıcıları doğrulamak için bunu sonuna çağırabilirim. Sadece ihtiyacım olan şey!
CSharpCodeProvider
sınıfındaki CreateValidIdentifier
yöntemini kullanın.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
string sFixedName = codeProvider.CreateValidIdentifier("somePossiblyInvalidName");
CodeTypeDeclaration codeType = new CodeTypeDeclaration(sFixedName);
Bazı girişler verilen geçerli bir ad verir. Sadece adı doğrulamak ve düzeltmek istemiyorsanız, giriş ve çıkışı karşılaştırın. Geçerli girişi değiştirmeyecek, böylece çıktı eşdeğer olacaktır.
public static bool IsReservedKeyWord(string identifier)
{
Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider();
return csharpProvider.IsValidIdentifier(identifier);
}
- 1. .NET: Bir sınıfın özelliklerini kopyalamak için bir sınıf var mı
- 2. Sınıf adını D
- 3. .net için ücretsiz printf var mı?
- 4. Sınıf adını
- 5. Bir kullanıcının şifresini doğrulamak için kullanabileceğim bir couchdb API var mı?
- 6. Dosya adını `FILE *` den almak için bir yol var mı?
- 7. .Net için iyi ayrıştırma kütüphaneleri var mı?
- 8. StreamReader.ReadLineAsync için .NET 4.0 değiştirme var mı?
- 9. CIDR alt ağları için yerel .NET türü var mı?
- 10. Php'de "harita" işlevi var mı?
- 11. Scala'da bir lambda işlevi var mı?
- 12. Bir Ruby .NET Derleyicisi var mı?
- 13. Bir .NET Polimorfik Veri Çerçevesi var mı
- 14. .NET FastCGI kitaplığı var mı?
- 15. php'nin bir işlevi veya ifadesi var mı?
- 16. Endeksleri döndüren bir Linq işlevi var mı?
- 17. Clojure'da Haskell'in bir işlevi var mı? Haskell'de
- 18. MySQL için pg_trgm (PostgreSQL) gibi bir Trigram işlevi var mı?
- 19. Iterables yazdırmak için herhangi bir tek işlevi var mı
- 20. Tastypie'nin API anahtarları oluşturmak için yardımcı bir işlevi var mı?
- 21. Baytları bulmak için herhangi bir "Pos" işlevi var mı?
- 22. Stata xtnbreg için bir R işlevi var mı?
- 23. HTML kaçmak için bir Delphi standart işlevi var mı?
- 24. .pot dosyalarını güncellemek için bir cmake işlevi var mı?
- 25. Javascript dizesi değişkenleri için getElementsByTagName() gibi bir işlevi var mı?
- 26. Python os.path.normpath() için PHP eşdeğer bir işlevi var mı?
- 27. Java dizeleri için bir sol() - işlevi var mı?
- 28. .NET transliteration kütüphanesi var mı?
- 29. ProGuard, sınıf adını saklar ancak paket adını değiştirmek için
- 30. Sınıf için yazdırma işlevi C++
çağırmaktır Bütün bunlar bir saklıdır çakışıyorsa bir tanımlayıcı yeniden adlandırmak etmektir gelmez sözcüğü. Geçirilen değer geçersiz karakterler içeriyorsa geçerli bir tanımlayıcı oluşturmaz. Yani bu yararlıdır, ancak yeni codetype'ı oluşturmadan önce gerçekleşmesi gereken her şey değildir. – Zach