private static TranslationInfo TranslateCSharpShaderLanguage2GLSL(CSSLFileGroup fileGroup) { TranslationInfo translationInfo = new TranslationInfo() { fileGroup = fileGroup, }; CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); CompilerParameters objCompilerParameters = new CompilerParameters(); objCompilerParameters.ReferencedAssemblies.Add( typeof(CSharpShadingLanguage.CSShaderCode).Assembly.Location); objCompilerParameters.GenerateExecutable = false; objCompilerParameters.GenerateInMemory = true; objCompilerParameters.IncludeDebugInformation = true; CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromFile( objCompilerParameters, fileGroup.ToArray()); if (cr.Errors.HasErrors) { translationInfo.errors = cr.Errors; } else { //List<SemanticShader> semanticShaderList = new List<SemanticShader>(); //Assembly assembly = cr.CompiledAssembly; //Type[] types = assembly.GetTypes(); //foreach (var type in types) //{ // if (type.IsSubclassOf(typeof(CSShaderCode))) // { // CSShaderCode shaderCode = Activator.CreateInstance(type) as CSShaderCode; // SemanticShader semanticShader = shaderCode.Dump(fullname); // semanticShaderList.Add(semanticShader); // } //} //foreach (var item in semanticShaderList) //{ // SemanticShaderInfo info = new SemanticShaderInfo(); // info.codeUpdated = item.Dump2File(); // info.shader = item; // translationInfo.semanticShaderList.Add(info); //} // 下面是Linq的写法。 var result = from semanticShader in (from type in cr.CompiledAssembly.GetTypes() where type.IsSubclassOf(typeof(CSShaderCode)) select(Activator.CreateInstance(type) as CSShaderCode).GetSemanticShader(fileGroup)) select new SemanticShaderInfo() { codeUpdated = semanticShader.Dump2File(), shader = semanticShader }; translationInfo.semanticShaderList = result.ToList(); } return(translationInfo); }