|
用C#开发智能手机软件:推箱子(二)(2) 66 { 67 if (array != null && array.Length == newSize) return; 68 if (array == null) array = new T[0]; 69 T[] newArray = new T[newSize]; 70 Array.Copy(array, newArray, Math.Min(array.Length, newArray.Length)); 71 array = newArray; 72 } 73 } 74 }
俗话说,工欲善其事,必先利其器。我们知道,Microsoft .NET Compact Framework 只是 Microsoft .NET Framework 的一个子集,她省略了一些不常用的功能。但是,如果我们恰好需要这些功能,只好自己重新实现一下了。这个 Fcl 静态类就是起这个作用的。源程序代码的注释已经写得很清楚了。
Fcl.NewLine 我原本是想写成这样的:
static class Fcl { static static string newLine; /// /// 获取为此环境定义的换行字符串。-- Environment /// public static string NewLine { get { if (newLine == null) { newLine = (Environment.OSVersion.Platform != PlatformID.Unix) ? "\r\n" : "\n"; } return newLine; } } }
可惜的是,这段代码无法在 .NET Compact Framework 下通过编译(如果是 .NET Framework 则没有问题)。原因是 PlatformID 枚举的成员:
Unix 操作系统为 Unix。
Win32NT 操作系统为 Windows NT 或较新的版本。
Win32S 操作系统为 Win32s(Win32 子集)类型。
Win32Windows 操作系统为 Windows 95 或较新的版本。
WinCE 操作系统为 Windows CE。
PlatformID.Unix 并不被 .NET CF 所支持。这实在是一件很奇怪的事,既然 .NET CF 都支持 PlatformID 的 Win32NT、Win32S、Win32Windows、WinCE 成员,为什么就不能支持 Unix 成员呢?这样,这个程序将来要移植到 Linux 操作系统时就有些小麻烦了。
要知道,这在主窗体的代码中用以下一段代码来实现在智能手机上禁用“前端显示”功能。
public partial class MainForm : Form { protected override void OnLoad(EventArgs e) { base.OnLoad(e); miTopMost.Enabled = (Environment.OSVersion.Platform != PlatformID.WinCE); env.LoadConfig(); env.LoadGroup(); LoadLevel(true); if (env.IsSave) Restore(env.Steps);
|