2012-04-01 72 views
1

C# XNA Xbox, in this case optional parameters are not optionalC#XNA的Xbox HashSet的元组和

由于从上面的问题帮助现在可选参数工作,或者至少看起来好像他们应该工作。

但是我现在卡在HashSets和元组,看起来不可用。

我可以写我自己的两个类的版本。使用Dictonary(可能)从零开始组装HashSet。不过,我宁愿继续使用标准的。

如果这些类存在于库的PC版本中,那么我可以将它们从PC C#库复制并粘贴到我自己的代码中?

使用“转到定义”结果在“HashSet [来自元数据]”,并且是C++头文件,就像它显示类接口但没有实现。

继续这里:stackoverflow.com/questions/10246572/c-sharp-hashset2-to-work-exactly-like-the-standard-c-sharp-hashset-not-compilin

+0

您看不到实现,因为Microsoft不会使用XNA的二进制文件发布调试符号。否则,他们会将XNA的所有源代码都带走。您可以看到您的代码将看到的完全相同:名称,类型,属性...但没有代码,也没有私人成员。 – Elideb 2012-04-02 09:34:40

回答

2

有都是非常基本的数据结构,你可以自己制作。

Here is a HashSet.

,这里是一个元组只需添加更多的项目需要。

public class Tuple<T1, T2> 
{ 
    public T1 Item1 { get; set; } 
    public T2 Item2 { get; set; } 

    public Tuple(T1 item1, T2 item2) 
    { 
     Item1 = item1; 
     Item2 = item2; 
    } 
} 
+0

链接到上面的HashSet实现意味着存储了大量未使用的值,大概这些中的一些可以通过使用bool而不是他们使用的UInt16s来抵消?内置的元组是如何实现的? “public T1 Item1 {get; set;}”看起来像一个属性的定义,数据在哪里存储?另外,复制原始HashSet定义好像应该比使用Dictionary创建另一个抽象层更好。我通常不会介意,但它可以在异常敏感的情况下使用。 – alan2here 2012-04-01 19:02:33

+1

HashSet总是存储大量未使用的值,所以如果空间非常重要,可以使用另外一种方法来创建其他内容,使用字典也可以存储某个键的值,这会使其略微更差。 '{get; set;}'是[自动实现的属性](http://msdn.microsoft.com/zh-cn/library/bb384054.aspx)。 – 2012-04-01 19:06:36

+0

谢谢,自动实现的属性会有用。 ClassicThunder的元组似乎比香草C#元组更容易变化。不认为它在平等的情况下工作,大概我必须实现这一点,以及我还没有想到的其他事情。我希望HashSet具有足够类似的界面,不会破坏事物。我不明白为什么我不能复制香草的。如果使用解决方案资源管理器“Program Files \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0 \ Profile \ Client \ System.Core.dll”向项目添加新的参考,会发生什么情况? – alan2here 2012-04-01 19:29:07

1

不,您无法获取PC二进制文件并在Xbox上使用它们。它们针对不同的硬件进行编译,而XNA X360项目将拒绝使用PC dll。

这些类可能有几个实现。我很确定CodePlex中的许多物理和引擎项目已经拥有它们,并且选择它们是完全合法的(尽管始终建议显示识别)。

+0

感谢您的信息。 – alan2here 2012-04-02 14:34:43