我是一个新的C#学生,当我学习代码阅读时,我有一个问题,这个代码
public class Solution {
public int solution(int[] priorities, int location)
{
int answer = 0;
Queue<KeyValuePair<int, int>> que = new Queue<KeyValuePair<int, int>>();
for(int i = 0; i < priorities.Length; i++)
{
que.Enqueue(new KeyValuePair<int, int>(i, priorities[i]));
}
}
正如我所知,new
运算符用于在引用类型对象中创建实例,如下代码所示:
Queue<KeyValuePair<int, int>> que = new Queue<KeyValuePair<int, int>>();
(所以que
是在堆栈中生成的,而new
在堆中分配内存<--我是这样学的)
但是:
que.Enqueue(new KeyValuePair<int, int>(i, priorities[i]))
在此代码中,new
不使用变量。
我想知道发生了什么
请教我
谢谢
表达式new MyType()
创建MyType
的实例--这是分配内存的地方。
当您编写mytypeM=...
时,您只需将一些东西赋给变量。 这不会分配任何东西。
所以这两个表达式是完全独立的。 您可以分配以前没有(直接)创建的内容:
MyType m = new MyType();
MyType m2 = m; // just re-reference the instance created above, no memory allocation here
你也可以创建一个对象,然后不对它做任何事情(尽管这通常是个坏主意):
new MyType();
对于que.enqueue(new KeyValuePair<;int,int>(i,priorities[i]))
,您将创建一个KeyValuePair
,但将它分配给方法item
-parameter。
您还可以将该对象存储到一个新变量中,并将其传递给方法:
var kv = new KeyValuePair<int, int>(i, priorities[i]);
que.Enque(kv);