我正在尝试通过 hostObject 发送一个类,但显然它不想工作:
using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;
using Roslyn.Scripting;
using Roslyn.Scripting.CSharp;
public class ShippingService
{
public class ShippingDetails//class that I want to send
{
public decimal total { get; set; }
public int quantity { get; set; }
public string destination { get; set; }
}
public static string ShipingCost(decimal total, int quantity, string destination)
{
var details = new ShippingDetails
{
total = total,
quantity = quantity,
destination = destination
};
try
{
ScriptEngine roslynEngine = new ScriptEngine();
Roslyn.Scripting.Session session = roslynEngine.CreateSession(details);
session.AddReference(details.GetType().Assembly);
session.AddReference("System.Web");
session.ImportNamespace("System");
session.ImportNamespace("System.Web");
var result = session.Execute("details.destination");
return result;
}
catch (Exception e)
{
return e.Message;
}
return "";
}
}
当我调用函数目的地时,例如“法国”,我应该在结果中得到这个值,但我遇到了错误:
Roslyn.Compilers.CompilationErrorException:(1,1):错误CS0103:名称“详细信息”在当前上下文中不存在
错误信息完全正确。当您有一个宿主对象时,您无法通过方法中保存该对象的局部变量的名称来访问它(这将如何工作?ScriptEngine
学这个名字吗?)。
相反,您可以访问主机对象directly,几乎就像您正在编写该类型的成员方法一样(但不完全是,您不能使用this
或访问非公开成员)。
这意味着你应该只写:
session.Execute("destination")
顺便说一句,根据 .Net 命名指南,公共属性的名称应以大写字母开头(例如Destination
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)