我必须将一些代码从Java转换为C#。
private Map[] M = new HashMap[2];
private Queue[] q = new LinkedList[2];
所以,我知道我必须使用Dictionary而不是HashMap,但是我在处理.Net中的泛型时遇到了一些问题。有什么想法吗?
以下是我在init方法中的内容:
M[0] = new HashMap<State, State>();
M[1] = new HashMap<State, State>();
q[0] = new LinkedList<State>();
q[1] = new LinkedList<State>();
其中State
是自定义类。
以下代码不起作用:
private Queue<State>[] q = new LinkedList<State>[2];
答案 0 :(得分:2)
您的代码未编译,因为在Java中,Queue
是类LinkedList<T>
实现的接口。赋值运算符通过,因为LinkedList 是队列。
在C#中Queue<T>
和LinkedList<T>
都是类,并且都不是从另一个派生的。最终结果是你可以成功
Queue<State>[] q = new Queue<State>[2];
这可能不会给你带来任何问题,只要稍后在Java中它不会尝试将这些队列强制转换回LinkedLists或其他怪异,并且你可以将所有Java Queue方法映射到C#Queue方法
更多阅读:
http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html
http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html