C# metro c中缺少String.Intern()方法#

C# metro c中缺少String.Intern()方法#,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,如何在Metro c#中获取字符串intern方法。如果在windows 8 c#中找不到,是否有任何等效的方法可以维护 系统对指定字符串的引用。这是CLR中内置的语言投影不可避免的副作用,该投影启用了“.NET for Metro样式应用程序”api。该投影将从WinRT api调用获得的字符串映射到System.string。底层字符串根本不是托管字符串,并且不存在于垃圾收集堆中。正是语言投影使其行为类似于System.String 因此,在该api中,String类没有特定于托管字符串的方

如何在Metro c#中获取字符串intern方法。如果在windows 8 c#中找不到,是否有任何等效的方法可以维护
系统对指定字符串的引用。

这是CLR中内置的语言投影不可避免的副作用,该投影启用了“.NET for Metro样式应用程序”api。该投影将从WinRT api调用获得的字符串映射到System.string。底层字符串根本不是托管字符串,并且不存在于垃圾收集堆中。正是语言投影使其行为类似于System.String


因此,在该api中,String类没有特定于托管字符串的方法。与Intern()和IsInterned()一样,这只能用于托管字符串。Copy、Clone和GetEnumerator也处于非法状态。没有解决方法,对mscorlib中托管字符串类的访问完全被引用程序集阻止,它将类型转发到System.Runtime.dll。如果没有这种方法,您必须使其正常工作。

您使用的是最新版本的Windows 8?据我所知,Metro概要文件在每个版本预览之间存在显著差异。如果您找不到它,那么您必须实现自己的解决方案。您可能只需要使用
ref
和一个自定义方法(可能是一个扩展)就可以成功。请描述一下您试图解决的问题,很可能是您走错了方向;他们正在使用internpool作为字段名。我们删除string上的方法的原因不是因为WinRT,而是因为我们选择了这个机会来删除那些当初后悔添加的方法,或者限制了我们未来的创新计划。string.GetEnumerator落入了“如果我们重新开始,我们不会添加它”。在.NET Framework中,它返回CharEnumerator,这对于在字符串上迭代非常低效(它会导致为每个循环分配),并且C#和VB的foreach代码自1.0天以来就没有使用过这种类型。(他们现在将字符串上的foreach有效地转换为“for循环”)“它使用字符串的索引器)。虽然有些删除可能看起来是任意的,但每次删除都是经过深思熟虑的选择,并落入上面的一个桶中。例如,有人检测到了我遇到的性能问题:这真是一个令人不快的问题,因为在F#中,它是一个可枚举的,因此使用字符串几乎是可以容忍的(