【问题标题】:How to pass an object to dynamic code in C#如何将对象传递给C#中的动态代码
【发布时间】:2017-11-16 15:55:05
【问题描述】:

我使用 System.CodeDom.Compiler 生成动态代码,我需要将一些对象传递给代码中的函数,但是当我传递对象时,它们引用我当前的名称空间...

string code = @"
            using System;
            using " + type + @";
            namespace First
            {
                public class Program
                {
                    static " + type + ".Class1 " + type.ToLower() + " = (" + type + ".Class1)"+o + @";                   
                    public static bool check () {
                        if( " + exp
                        +
                        @")
                            return true;
                        else 
                            return false;
                    }
                    public static void Main()
                    {
                    " +
                       "    Console.WriteLine(\"Hello, world!\");"
                      + @"
                    }
                }
            }
        ";

我收到此错误:名称“MineRuleEngine”(我当前的命名空间)在当前上下文中不存在

【问题讨论】:

  • 什么 type 在运行时以及为什么在末尾使用@ 字符?
  • 考虑使用插值字符串来提高可读性:Console.WriteLine($"Name = {name}, hours = {hours:hh}");
  • 我的问题是对象“o”是指例如 MineRuleEngine.person 。而我的动态代码不知道“MineRuleEngine”命名空间
  • 为什么是动态编程标签?

标签: c# dll codedom


【解决方案1】:

我的问题是对象“o”是指例如 MineRuleEngine.person 。而我的动态代码不知道“MineRuleEngine”命名空间

您的代码不知道该对象的原因是您必须明确注意使用“外部”资源(即类)

您必须在代码中指定using MyNamespace;,并且您必须添加对包含命名空间的程序集的引用。

例如:

 CSharpCodeProvider provider = new CSharpCodeProvider();
 CompilerParameters param = new CompilerParameters(new string[] { "System.dll", "Scripting.dll" });

也看看这个问题Referencing current assembly with CompilerParameters

【讨论】:

    【解决方案2】:

    我将对象直接传递给方法并通过反射调用它

    public static bool check (Object o) {
    

    并将参数“o”放入字符串中,并删除静态修饰符

    type + " " + type.ToLower() + " = " + "(" + type + ")o ;"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      相关资源
      最近更新 更多