提问者:小点点

这段代码中的新运算符是什么意思


我是一个新的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不使用变量。

我想知道发生了什么

请教我

谢谢


共1个答案

匿名用户

表达式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);