2008-09-18 21 views
21

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

25

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) 
2

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!

7

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.

+4

ç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

1
public static bool IsReservedKeyWord(string identifier) 
     { 
      Microsoft.CSharp.CSharpCodeProvider csharpProvider = new Microsoft.CSharp.CSharpCodeProvider(); 
      return csharpProvider.IsValidIdentifier(identifier); 
     } 
İlgili konular