Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编写脚本以在程序内执行重复的业务任务_C#_.net 4.0 - Fatal编程技术网

C# 编写脚本以在程序内执行重复的业务任务

C# 编写脚本以在程序内执行重复的业务任务,c#,.net-4.0,C#,.net 4.0,我有一个包含起始值和结束值的类​​任务的完成 public class WorkPackage { public int Id { get; set; } public string Name { get; set; } public DateTime FromTime { get; set; } public DateTime ToTime { get; set; } } 我还显示保存的值​​如下所示(根据FromTime分组) 最终用户可以 通过拖放将一个

我有一个包含起始值和结束值的类​​任务的完成

public class WorkPackage
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime FromTime { get; set; }
    public DateTime ToTime { get; set; }
}
我还显示保存的值​​如下所示(根据
FromTime
分组)

最终用户可以

  • 通过拖放将一个
    工作包从一个月移动到另一个月
  • 根据某些规则,将一个
    工作包
    拆分为两个或多个
    工作包
    s
  • 所以我有以下方法:

    public void MoveWorkPackageToMonth(WorkPackage wp, int month)
    {
       ....
    } 
    public List<WorkPackage> SplitWorkPackage(WorkPackage wp)
    {
       ....
    } 
    

    有图书馆帮我吗?或者我必须定义自己的自定义业务语言?(我使用了
    .Net4

    NuGet软件包ITVComponents.Scripting.CScript提供了一个支持解释器和编译代码的脚本引擎。 该语法是从JavaScript派生的,带有一些特殊的扩展,以支持动态类型加载和本机脚本部分。 不幸的是,目前还没有文档,但我正在编写

    基本上,对于您想要实现的目标,您可以使用以下代码:

    ExpressionParser.ParseBlock(yourScript, yourObject, s => DefaultCallbacks.PrepareDefaultCallbacks(s.Scope, s.ReplSession));
    
    其中,您的对象将是实现方法MoveWorkPackageToMonth的对象, SplitWorkPackage,一种查找包(FindPackage?)的方法,以及整数属性和脚本

    MoveWorkPackageToMonth(FindPackage(“Package1的名称”),4月);将工作包移动到Month(FindPackage(“Package2的名称”),2月)


    此代码将被解释,因此,如果您有大量操作要执行,它可能会很慢。

    脚本是否显示给用户?如果不是,一个简单的解决方案可能是为操作创建一个数据类(例如,
    类PackageMovement{int-PackageId;int-SourceMonth;int-destmount;}类PackageSplit{int-PackageId;}
    并使用内置序列化程序(XML或JSON)之一对其进行序列化@Heinzi:user想要查看脚本,因为他想要选择我要查看的操作。在这种情况下,自定义语言可能是最合适的解决方案。由于语言相当简单,我认为您不需要一个完整的lexer/paser生成器。一个简单的基于正则表达式的手工编写的解析器应该足够了:为每个操作编写一个正则表达式您的命令(即MoveRegex和SplitRegex),其中包括作为命名组的参数。然后在
    或换行符上拆分您的输入,然后依次尝试每个正则表达式。
    ExpressionParser.ParseBlock(yourScript, yourObject, s => DefaultCallbacks.PrepareDefaultCallbacks(s.Scope, s.ReplSession));