private BaseBlock CopyBlock(object value) { object[] args = null; if (value is IModuleBlock) { var oldBlock = value as IModuleBlock; args = new object[] { oldBlock.GCommand }; } else if (value is VariableBlock) { var oldBlock = value as VariableBlock; args = new object[] { oldBlock.FriendlyName, oldBlock.GVariable }; } else if (value is FunctionBlock) { var oldBlock = value as FunctionBlock; args = new object[] { oldBlock.GFunction }; } else if (value is ComputeBlock) { args = new object[] { (value as ComputeBlock).OperatorType }; } if (value.GetType().GetInterfaces().Contains(typeof(IModuleBlock))) { var moduleBlock = value as IModuleBlock; if (moduleBlock.GCommand.Parent != null) { Task.Run(async() => { await compiler.LoadReferenceAsync(moduleBlock.GCommand.Parent.Path); await compiler.LoadDependenciesAsync(moduleBlock.GCommand.Parent.Dependencies); }); } } return(Activator.CreateInstance(value.GetType(), args) as BaseBlock); }