[英]C# CodeDom: Custom class as parameter in string code
抱歉,我是使用CodeDom進行編程的新手,我遇到了無法解決的問題。 在考慮是否某些人知道解決方案。
我在類文件中有以下代碼:
public class AnotherCustomClass {
public string Employer { get; set; }
public DateTime? DateOfHire { get; set; }
}
public class CustomClass {
public int X { get; set; }
public int Y { get; set; }
public AnotherCustomClass[] YetAnother { get; set; }
}
public void DoSomething()
{
string expression = @"using System;
namespace MyNamespace {
public class MyClass {
public static int DoStuff(CustomClass myCustomClass) {
return myCustomClass.X + myCustomClass.Y;
}
}
}";
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters assemblies = new CompilerParameters(new[] { "System.Core.dll" });
CompilerResults results = provider.CompileAssemblyFromSource(assemblies, expression);
Type temporaryClass = results.CompiledAssembly.GetType("MyNamespace.MyClass");
MethodInfo temporaryFunction = temporaryClass.GetMethod("DoStuff");
CustomClass data = new CustomClass() { X = 1, Y = 2 };
object result = temporaryFunction.Invoke(null, new object[] { data });
return result;
}
我想在DoStuff函數中將數據 (一個自定義創建的類,其中包含另一個自定義類的數組)變量作為參數輸入,但我仍然遇到錯誤。 有辦法解決這個問題嗎?
多個錯誤,請通過以下方式更改:
string expression = @"using System;
namespace MyNamespace {
public class MyClass {
public static int DoStuff(CustomClass myCustomClass) {
return myCustomClass.X + myCustomClass.Y;
}
}
public class CustomClass
{
public int X;
public int Y;
public CustomClass(int x, int y) { X = x; Y = y; }
}
}";
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters assemblies = new CompilerParameters(new string[] { "System.dll" });
CompilerResults results = provider.CompileAssemblyFromSource(assemblies, expression);
Type temporaryClass = results.CompiledAssembly.GetType("MyNamespace.MyClass");
Type parClass = results.CompiledAssembly.GetType("MyNamespace.CustomClass");
MethodInfo temporaryFunction = temporaryClass.GetMethod("DoStuff");
object mc = parClass.GetConstructor(new Type[] { typeof(int), typeof(int) }).Invoke(new object[]{1,2});
object result = temporaryFunction.Invoke(null, new object[] { mc });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.