mjb*_*es7 5 .net c# regex reflection winforms
可能重复:
C#的解析器
假设我有一个简单的类,例如winforms应用程序中的文本框控件:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void DoSomething(string x)
{
return "Hello " + x;
}
}
Run Code Online (Sandbox Code Playgroud)
有一种简单的方法可以解析它的下列项目:
任何想法/建议表示赞赏.
你可以使用Reflection:
Type type = typeof(Person);
var properties = type.GetProperties(); // public properties
var methods = type.GetMethods(); // public methods
var name = type.Name;
Run Code Online (Sandbox Code Playgroud)
更新您的第一步是编译您的课程
sring source = textbox.Text;
CompilerParameters parameters = new CompilerParameters() {
GenerateExecutable = false,
GenerateInMemory = true
};
var provider = new CSharpCodeProvider();
CompilerResults results = provider.CompileAssemblyFromSource(parameters, source);
Run Code Online (Sandbox Code Playgroud)
接下来,您应该验证您的文本是否是有效的c#代码.实际上你的代码是无效的 - 方法DoSomething标记为void,但它返回一个字符串.
if (results.Errors.HasErrors)
{
foreach(var error in results.Errors)
MessageBox.Show(error.ToString());
return;
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在从编译的内存汇编中获取类型:
var assembly = results.CompiledAssembly;
var types = assembly.GetTypes();
Run Code Online (Sandbox Code Playgroud)
在你的情况下,将只有Person类型.但无论如何 - 现在您可以使用Reflection从这些类型中获取属性,方法等:
foreach(Type type in types)
{
var name = type.Name;
var properties = type.GetProperties();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8960 次 |
| 最近记录: |