Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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#_Json - Fatal编程技术网

C# 条件对象创建

C# 条件对象创建,c#,json,C#,Json,好的,很明显我在.NET中迷失了方向,因为它不是我通常使用的代码。我试图在解析配置文件期间创建一个对象数组,以便在帧处理期间尽可能快速高效地处理它们。我一直在互联网上搜寻我应该做的事情,但要么我不知道搜索的正确术语,要么我走错了路 下面是一段代码,它试图循环遍历一个JSON文件,并将预先生成的类和配置值分配到一个对象数组中,希望以每秒60帧的速度遍历这些对象 public class UserConfig { public object[] myActions = { };

好的,很明显我在.NET中迷失了方向,因为它不是我通常使用的代码。我试图在解析配置文件期间创建一个对象数组,以便在帧处理期间尽可能快速高效地处理它们。我一直在互联网上搜寻我应该做的事情,但要么我不知道搜索的正确术语,要么我走错了路

下面是一段代码,它试图循环遍历一个JSON文件,并将预先生成的类和配置值分配到一个对象数组中,希望以每秒60帧的速度遍历这些对象

public class UserConfig {

    public object[] myActions = {
    };

    public void processConfig() {

        this.myActions.Clear();

        string json = File.ReadAllText("config.json");
        JToken jsonNodes = JToken.Parse( json );

        WalkNode( jsonNodes, item => {

            object newAction = new object{};

            switch( item["bodyAction"].ToString() ) {
                case "handLeftForward":
                    newAction.detector = new DetectArmForward( JointType.ShoulderLeft, JointType.HandLeft );
                break;
            }

            switch( item["detectType"].ToString() ) {
                case "distanceMin":
                    switch( newAction.detector.direction ) {
                        case "negative":
                            switch( newAction.detector.path ) {
                                case "Z":
                                    newAction.detector.checker = new CheckNegativeDistanceMinZ( newAction.detector.jointBase, newAction.detector.jointEnd, item.distanceMin );
                                break;
                            }
                        break;
                        case "positive":
                            switch( newAction.detector.path ) {
                                case "Z":
                                    newAction.detector.checker = new CheckPositiveDistanceMinZ( newAction.detector.jointBase, newAction.detector.jointEnd, item.distanceMin );
                                break;
                            }
                        break;
                    }
                break;
            }

            switch( item["executeAction"].ToString() ) {
                case "keyTap":
                    newAction.executer = new executeKeyTap( 123 );
                break;
            }

            this.myActions[ this.myActions.Count() ] = newAction;

        });

    }
}
然后我希望我能做点像

    for( action in this.myActions ) {
        if( action.detector.checker.check( joints ) ) {
            action.executer.execute( joints );
        }
    }
检查并有条件地执行从配置处理生成的方法

它不允许我使用这个设置(以及所有我尝试过的),因为对象必须预先声明,但我不知道我需要什么特定的对象。。。所以我迷路了:)
谢谢大家的关注

我可能忽略了一些东西,但您似乎在寻找命令
foreach
,而不是for。这在你的情况下应该很好

foreach(object action in this.myActions)
{
    if( action.detector.checker.check( joints ) ) {
        action.executer.execute( joints );
    }
}

如果您只想将一个对象转储到容器中,然后从另一端取出一个数组,则可以定义一个列表:

var myList = new List<dynamic>();
myList.Add(someObject);
var myArray = myList.ToArray(); 

由新DetectArmForward创建的对象将被分配给该属性。

听起来像是在尝试动态生成代码,您可能想看看DLR上运行的一种动态语言,如ironpython,它可能更适合此任务。动态组装对象,或者我所理解的元编程,在python或ruby中更直接?这似乎是可行的,但我想用正确的方式做事,不管是什么方式?需要动态生成不同方法的数组不是唯一的。我不觉得自己在这里有什么新突破,只是不确定正确的做事方式。谢谢您不只是创建数据对象并通过函数管道传递它们,有什么特别的原因吗?您不会执行附加到对象的方法,而是对对象的内容作出反应。这会稍微改变一些事情,因为该方法将在第一次求值时执行,但会在以后否定对foreach的需要。“checker.check()”方法所比较的数据在每个周期都会不同,这就是foreach以后的用途。因此,我基本上可以编译所有适当类的列表,然后在帧处理过程中直接运行它们。如果要使用IronPython,可以用Python编写一个库来执行对象操作,然后在命名空间中使用它。有一个静态方法,它接受一个对象和一个方法,并返回附加了该方法的对象。你也可以看看Roslyn,代码生成是该项目讨论的主要用例之一。谢谢:)但主要问题是无法创建我想循环使用的元素!我走这条路。这个应用程序比我在这里发布的要复杂得多,但这向我展示了我必须适应类型限制语言的真实心态:)
class myObject {
    public dynamic detector; 
    public dynamic someOtherProperty;
}