您好C#编程新手.
我一直试图以这种方式投射:
m_GameBoard = new Board((short)i_array[1]); // (i_array is defined as object[] i_array)
Run Code Online (Sandbox Code Playgroud)
编译器没有说什么,但在运行时遇到以下崩溃:
System.InvalidCastException未处理 Message = Association指定无效.Source = B11 Ex02 StackTrace:ב-B11_Ex02.Game..ctor(Object [] i_array)ב-..\B11 Ex02\Game.cs:line 32ב-B11_Ex02.Program.Main()ב-\ B11 Ex02\Program .cs:line 56ב-System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args)ב-System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args)ב-Microsoft.VisualStudio.HostingProcess.HostProc. RunUsersAssembly()ב-System.Threading.ThreadHelper.ThreadStart_Context(Object state)ב-System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean ignoreSyncCtx)ב-System.Threading.ExecutionContext.Run(ExecutionContext executionContext ,ContextCallback回调,对象状态)ב-System.Threading.ThreadHelper.ThreadStart()InnerException:
非常感谢您的帮助,提前致谢
错误消息告诉您,返回的任何内容i_array[i]实际上都不能转换为short.因此,我的建议是检查i_array以查看它在失败时在索引i中实际包含的内容.
编辑:Per Ben Voigts在我的评论中的见解:
这是拆箱,所以即使存储在i_array [i]的值可以转换为short,表达式(short)i_array [i]只有在i_array [i]完全是短的时才有效(我认为运行时为例外) unsigned short vs short,但不能进行扩大或缩小转换).
我只在这里发帖,因为OP无法看到我删除的帖子.问题是,你很可能初始化元素与集合中int's,但是你只需要明确短裤添加到集合,如果你需要拆箱他们(DO你真正需要拆箱他们?为什么不使用List<short>呢?)