Unity3D中JavaScripts的代码转C# 求大神把以下代码编译成C#,万分感谢!!

作者&投稿:度和 (若有异议请与网页底部的电邮联系)
谁能帮我把这段vb.net代码转成c#的?万分感谢!!~

//得到数据视图,参数为要排序的列
private DataView GetDv(string strSort)
{
//定义数据库连接
DataView dv;
SqlConnection CN = new SqlConnection();
try
{
//初始化连接字符串
CN.ConnectionString = "data source=pmserver;initial catalog=Northwind;persist security info=False;user id=sa;Password=sa;";
CN.Open();
//从NorthWind得到orders表的数据
SqlDataAdapter adp = new SqlDataAdapter("select * from orders", CN);
DataSet ds = new DataSet();
adp.Fill(ds);
//得到数据视图
dv = ds.Tables[0].DefaultView;
}
catch (Exception ex)
{
#if DEBUG
Session["Error"] = ex.ToString();
Response.Redirect("../error.aspx"); //跳转程序的公共错误处理页面
#endif
}
finally
{
//关闭连接
CN.Close();
}
//排序
dv.Sort = strSort;
return dv;
}

private void Page_Load(System.Object sender, System.EventArgs e)
{
if (! IsPostBack)
{
ViewState["strSort"] = "orderid";
dgOrder.DataSource = GetDv[ViewState["strSort"].ToString()];
dgOrder.DataBind();
}
}
//排序
private void dgOrder_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
{
dgOrder.CurrentPageIndex = 0;
//得到排序的列
ViewState["strSort"] = e.SortExpression.ToString();
dgOrder.DataSource = GetDv[ViewState["strSort"].ToString()];
dgOrder.DataBind();
}

//分页
private void dgOrder_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
//得到分页的页号
dgOrder.CurrentPageIndex = e.NewPageIndex;
dgOrder.DataSource = GetDv[ViewState["strSort"].ToString()];
dgOrder.DataBind();
}


可能会有点错误的,需要自己修改一下

我知道有两种方式可以实现,
1.利用正则表达式进行语义分析,这种方式需要考虑的东西太多。
2.利用C#对“动态语言”的支持。也就是说,将654*6+65-27/654整个字符串当做一个string类型参数传入某一方法 然后返回执行后的结果,相信这个应该很适合你,下面是一个类,你直接用以下方法调用即可:
如:
public class ProgramTest
{
static void Main(string[] args)
{
string res = string.Empty;
string error = string.Empty;

res = Evaluator.ReturnRsult("654*6+65-27/654", out error); //这里就是你要传进去的式子,只要是标准的式子便可。
if (!string.IsNullOrEmpty(error))
{
Console.WriteLine(error);
}
else
{
Console.WriteLine("执行结果为:" + res);
}
Console.Read();
}
}

------
下面就是实现功能的类,copy到您的程序中就行,注意引用到的名字空间有:
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Text.RegularExpressions;
------------------------

///
/// C#代码执行器,提供动态执行C#代码
///
public class Evaluator
{
private static CSharpCodeProvider cCodeProder = null;
private static CompilerParameters compPars = null;
private static CompilerResults compResult = null;
private static Regex rexLastCode = new Regex(@"(print:).+;\s*$", RegexOptions.Compiled | RegexOptions.IgnoreCase); //用于搜索最后一条代码的位置

static Evaluator()
{
cCodeProder = new CSharpCodeProvider();
}

///
/// 执行指定的代码
///
///
///
private static string Eval(string strCodes, out string strErrText)
{
#region 编译代码
strErrText = InitCompile(ref strCodes);
if (strErrText != null) return null;
try
{
compResult = cCodeProder.CompileAssemblyFromSource(compPars, new string[] { strCodes });
}
catch (NotImplementedException nie)
{
strErrText = nie.Message;
return null;
}

if (compResult.Errors.HasErrors)
{
StringBuilder sbErrs = new StringBuilder(strCodes + System.Environment.NewLine);
sbErrs.Append("您所提供的C#代码中存在语法错误!" + System.Environment.NewLine);
foreach (CompilerError err in compResult.Errors)
{
sbErrs.AppendFormat("{0},{1}" + System.Environment.NewLine, err.ErrorNumber, err.ErrorText);
}
strErrText = sbErrs.ToString();
return null;
}
#endregion

Assembly assembly = compResult.CompiledAssembly;
object prgInsl = assembly.CreateInstance("System._ClassEvaluatorCompiler");
MethodInfo medInfo = prgInsl.GetType().GetMethod("PrintResult");
string strRetn;
try
{
strRetn = medInfo.Invoke(prgInsl, null).ToString();
return strRetn;
}
catch (Exception exMsg)
{
strErrText = exMsg.Message;
return null;
}
}

///
/// 预编译代码
///
/// 待编译的源代码
/// 如果错误则返回错误消息
private static string InitCompile(ref string strCodes)
{
List lstRefs = new List();//代码字符串中的include引用程序集------未使用

List lstUsings = new List();//代码字符串中的using引用命名空间


#region 分离引用的程序集与命名空间
int point = 0;
string strTemp;
char[] cCodes = strCodes.ToCharArray();
for (int i = 0; i < cCodes.Length; ++i)
{
if (cCodes[i] == '
' || (cCodes[i] == '' && cCodes[i + 1] == '
'))
{
strTemp = strCodes.Substring(point, i - point);
if (strTemp.TrimStart(new char[] { ' ' }).StartsWith("using "))
{
strTemp = strTemp.Substring(6).Trim();
if (!lstUsings.Contains(strTemp))
{
lstUsings.Add(strTemp);
}
else
{
return "预编译失败,代码中不允许包含重复命名空间导入。" + System.Environment.NewLine + "using " + strTemp;
}
point = cCodes[i] == '
' ? i + 1 : i + 2;
++i;
}
else if (strTemp.TrimStart(new char[] { ' ' }).StartsWith("include "))
{
strTemp = strTemp.Substring(8).Trim().ToLower();
if (!lstRefs.Contains(strTemp))
{
lstUsings.Add(strTemp);
}
else
{
return "预编译失败,代码中不允许包含重复的程序集引用。" + System.Environment.NewLine + "include " + strTemp;
}
point = cCodes[i] == '
' ? i + 1 : i + 2;
++i;
}
else
{
break;
}
}
}
strCodes = strCodes.Substring(point);
#endregion

#region 初始化编译参数
if (compPars == null)
{
compPars = new CompilerParameters();
compPars.GenerateExecutable = false;
compPars.GenerateInMemory = true;
}
//string workDir = System.Web.HttpContext.Current.Server.MapPath("~") + "Bin\\";
//string workDir = System.Environment.CurrentDirectory;
compPars.ReferencedAssemblies.Clear();
compPars.ReferencedAssemblies.Add("system.dll");
compPars.ReferencedAssemblies.Add("system.data.dll");
compPars.ReferencedAssemblies.Add("system.xml.dll");

//compPars.ReferencedAssemblies.Add(workDir + "BLL.dll");
//compPars.ReferencedAssemblies.Add(workDir + "Component.dll");
//compPars.ReferencedAssemblies.Add(workDir + "Model.dll");
//compPars.ReferencedAssemblies.Add(workDir + "Utility.dll");

foreach (string str in lstRefs)
{
compPars.ReferencedAssemblies.Add(str);
}
#endregion

StringBuilder sbRetn = new StringBuilder();

#region 生成代码模板
///*为代码添加return 语句*/
Match match = rexLastCode.Match(strCodes);
if (match.Success)
{
strCodes = string.Format("{0}
return {1}", strCodes.Substring(0, match.Groups[1].Index), strCodes.Substring(match.Groups[1].Index + match.Groups[1].Length));
}
else
{
strCodes = strCodes.Trim();//把要运行的代码字符串作为返回值---作为输出 - 显示运行的字符串源码
}

/*拼接代码*/
foreach (string str in lstUsings)
{
sbRetn.AppendLine("using " + str);
}
sbRetn.AppendLine("namespace System{");
sbRetn.AppendLine("public class _ClassEvaluatorCompiler{");
sbRetn.AppendLine("public static object PrintResult(){");
sbRetn.AppendLine(strCodes);
sbRetn.AppendLine("}}}");
#endregion
strCodes = sbRetn.ToString();
return null;
}



///
/// 执行一段表达式
///
/// 要执行的表达式字符串
/// 错误提示语句
/// 返回执行结果
public static string ReturnRsult(string info, out string error)
{
string returnStr = string.Empty;
info = "return " + info + ";";
returnStr = Eval(info, out error);
return returnStr;
}
}

void BuildGrid()

{
GUILayout.BeginVertical();
for(i=0; i<rows; i++)
{
GUILayout.BeginHorizontal();
for(j=0; j<cols; j++)
{
object card = aGrid[i][j];
if(GUILayout.Button(Resources.Load(card.img),
GUILayout.Width(cardW)))
{
Debug.Log(card.img);
}
}
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
}
你只有这么一段改的必定不彻底
你看就是要做牌类游戏


游戏开发需要什么基础
1、需要掌握常用的编程语言,包括C++、jascript等,手机开发使用的开发语言是C++,3D游戏开发使用的编程语言一般要使用c#或者jascript。2、掌握开发引擎,游戏开发经常用到的游戏开发引擎有unity3D和Cocos2dx。3、如果从事游戏设计方面的工作,需要掌握ps、3dmax、ae等常用软件。4、有一定的算法作为基础。主要...

游戏开发的工作内容
1、编写系统设计文档,设计文档完成后能够实现相关代码。2、优化unity3D引擎以及技术、内部使用工具的开发。3、和策划和美术部门沟通与对接,制定相关资源开发标准,开发团队的工作计划、并保障项目进度。4、熟练使用ja、c++等编程语言,熟悉IOS\/Android等平台针对游戏相关的特。游戏开发工程师待遇很好,一般...

游戏开发培训出来能找到工作吗
游戏开发需要具备的技能 1、需要掌握常用的编程语言,包括C++、jascript等,手机开发使用的开发语言是C++,3D游戏开发使用的编程语言一般要使用c#或者jascript。2、掌握开发引擎,游戏开发经常用到的游戏开发引擎有unity3D和Cocos2dx。3、如果从事游戏设计方面的工作,需要掌握ps、3dmax、ae等常用软件。

游戏开发是什么意思
游戏开发方向不一样,包括程序、策划、美术等。程序开发需要掌握常用的编程语言,包括C++、jascript等,还要掌握开发引擎,游戏开发经常用到的游戏开发引擎有unity3D和Cocos2dx。游戏策划运营需要有文案策划、游戏玩法设计、游戏关卡设计、系统策划实等基础。游戏美术涉及到很多方面,需要掌握游戏规则和游戏的玩法...

询问要开发游戏需要学习什么
你可以先去【绘学霸】网站找“游戏特效\/unity3D”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net\/web\/AppWebClient\/AllCourseAndResourcePage?type=1&tagid=305,306&zdhhr-11y17r-38466477 想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得...

沈丘县14735621434: unity3D的JavaScript文件打不开怎么办? -
由舒消渴: 这样默认打开是运行你要指定它用什么打开 比如记事本 正常情况 unity中打开是用自带的编辑器MonoDevelop

沈丘县14735621434: unity 3d 中一步加载时 进度条怎么 实现啊??要javascrip版的 -
由舒消渴: function Start () { //加载名为Level的场景 var async : AsyncOperation = Application.LoadLevelAsync ("Level"); yield async; Debug.Log("Loading complete"); } 然后你可以在update中获取加载的进度,转化为百分比,更改scrollbar的值就好了

沈丘县14735621434: Unity3D中用JavaScript写脚本,如何引用其他JS脚本,调用其他脚本内的方法, -
由舒消渴: 1、方法定义为static,直接类名.方法名调用;如 class Main1{ public static function Add(j:int,i:int):void { Debug.Log(i+j); } } Main1.Add(1,2);2、new 一个对象,对象调用,如 var m:Main1 = new Main1(); m.Add(2,3);3、GameObject.Find(),得到那个有这个脚本组件的GameObject,这个GameObject再GetComponent,得到script,scirpt再调用方法.

沈丘县14735621434: unity3d 如何用javascript 自定义对象 -
由舒消渴: ...就是普通的 js 自定义对象啊.1,对象创建方式1)对象初始化器方式 格式:objectName = {property1:value1, property2:value2,…, propertyN:valueN} property是对象的属性 value则是对象的值,值可以是字符串、数字或对象三者之一 例如:...

沈丘县14735621434: Unity3D的脚本语言,用JAVA or C#??
由舒消渴: 那个是Javascript,不是Java~不要把Java和Javascript相提并论,那不是一个重量级的……其实,在U3D环境下,C#和Javascript的区别只是语法有点不同而已个人更喜欢C#,微软当家花旦嘛,强大的高富帅二代嘛,微软的下任继承人啊不过要说简单的话,还是Javascript,毕竟,C#你至少要懂得神马是Class,神马是继承、接口(虽然超简单)Javascript的话,你知道知道神马是函数就行了再次PS:在U3D环境下,C#和Javascript的区别只是语法有点不同而已

沈丘县14735621434: 我是新手,问一下在Unity 3D中用C#更好还是javascript更好 -
由舒消渴: 现在用C#的比较多 而且在团队配合中用C#写脚本比较容易管理 JavaScript更适合独立开发者 因为游戏写大了之后 js没有C#的特性比如接口 抽象函数这些 写起来会有很多麻烦 很多重复性的工作

沈丘县14735621434: unity中C#脚本和Java脚本怎么互相调用 -
由舒消渴: Unity调用安卓脚本:unity端//通过报名获取java class AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); //获取当前的activity AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); string str...

沈丘县14735621434: 如何在Unity3d中创建脚本 -
由舒消渴: Unity支持三种汇编语言,分别是JS、c#和Boo. 创建脚本的方法主要有三种:①首先启动Unity,单机菜单栏中的Assets->Create来添加脚本. ②第二种是启动Unity后,单击Project视图中的Create按钮创建脚本,如图所示 ③启动Unity应用程序,在Project视图中的assets文件夹内通过右击弹出的 列表框创建脚本,如图所示. 添加完脚本后就可以在Project视图中看到,双击脚本文件就可以将其打开进行编辑.

沈丘县14735621434: unity3d怎么使用自带js编译器 -
由舒消渴: 在在脚本顶部加一句 import System.Collection.Generic; 使用为:private var pointList : List. = new List.();

沈丘县14735621434: 为什么在unity3d写的java代码都说can't add script.代码都是书上现成的.无一例外的都是这个现象..
由舒消渴: 你的代码里有错误,编译不通过,所以出现这种情况.请先检查你的代码.另外,unity3d里面用的是javascript代码,不是java代码,这点希望不要搞混了.

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网