Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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
使用IronRuby或IronPython修改C#对象列表_C#_.net_Export_Ironpython_Ironruby - Fatal编程技术网

使用IronRuby或IronPython修改C#对象列表

使用IronRuby或IronPython修改C#对象列表,c#,.net,export,ironpython,ironruby,C#,.net,Export,Ironpython,Ironruby,如果我有一个对象列表,例如list其中Foo有两个属性,那么我可以为每一行创建一个或多个ironruby或ironpython脚本 下面是一些伪代码: var items = new List<Foo>(); foreach(var item in items) { var pythonfunc = getPythonFunc("edititem.py"); item = pythonfunc(item); } var items=newlist(); foreach(

如果我有一个对象列表,例如
list
其中
Foo
有两个属性,那么我可以为每一行创建一个或多个ironruby或ironpython脚本

下面是一些伪代码:

var items = new List<Foo>();
foreach(var item in items) {
   var pythonfunc = getPythonFunc("edititem.py");
   item = pythonfunc(item);
}
var items=newlist();
foreach(项目中的var项目){
var pythonfunc=getPythonFunc(“edititem.py”);
项目=蟒蛇(项目);
}
我需要一种动态的方式来修改代码存储在db或文件中的列表

如果您认为有更好的方法可以做到这一点,或者有其他方法可以为客户端编写自定义例程,从数据库中提取特定于客户端的数据(导出),请发表评论或留下建议


谢谢

我以前使用过这种方法,将IronPython脚本保存在数据库和文件中。我喜欢的模式是使用约定的名称存储Python函数。换句话说,如果您正在处理Foo类型的对象,那么在.py文件或表中可能有一个名为“Foo_filter”的Python函数。最终,您可以执行Python文件并将函数解析到函数引用字典中

一个快速示例应用程序

您的foo类:

public class Foo {
    public string Bar { get; set; }
}
设置Foo并调用getPythonFunc(i)

filter.py的内容:

def filter_item(item):
    item.Bar = item.Bar.title()
基于属性应用规则的简单方法(而不是在Foo上添加Size属性):

以及filter.py的新内容

def filter_small(item):
    item.Bar = item.Bar.lower()

def filter_medium(item):
    item.Bar = item.Bar.title()

def filter_large(item):
    item.Bar = item.Bar.upper()
我有一堆更完整的样品,可以在

def filter_item(item):
    item.Bar = item.Bar.title()
var items = new List<Foo>() {
    new Foo() { Bar = "connecticut", Size = "Small" },
    new Foo() { Bar = "new york", Size = "Large" },
    new Foo() { Bar = "new jersey", Size = "Medium" }
};
var filterFunc = scope.GetVariable("filter_" + foo.Size.ToLower());
def filter_small(item):
    item.Bar = item.Bar.lower()

def filter_medium(item):
    item.Bar = item.Bar.title()

def filter_large(item):
    item.Bar = item.Bar.upper()