背景

当前,如果我想用C#或Java创建new对象,请键入类似于以下内容:



C#3.0试图通过实现以下编译器技巧来提高简洁性:



问题

由于编译器已经知道我想创建某种特定类型的新对象(由于我在实例化它的过程中没有为其分配null引用,也没有分配用于实例化它的特定方法),为什么我不能这样做以下?

    //default constructors with no parameters:
    List<int> listOfInts = new(); //c#
    ArrayList<String> data = new(); //Java

后续问题:
  • 这种方法可能会遇到什么陷阱。我可能会错过哪些边缘情况?
  • 是否会有其他方法来缩短实例化(不使用VB6-esque var)并且仍然保留含义?

  • 注意:我在这种功能中看到的主要好处之一就是清晰度。可以说var不受限制。对我来说,它是没有用的,它会从正确的位置获得任务,那么为什么要麻烦呢?对我来说,new()实际上缩短了它的含义。无论您声明什么,它都是new(),对我来说这将是简洁明了的。

    最佳答案

    我同意这将是一个不错的功能。一个更好的例子是需要更多的输入:

    Dictionary<string, int> myDictionary = new Dictionary<string, int>();
    

    如果可以将其实例化为:
    Dictionary<string, int> myDictionary = new();
    

    和:
    Dictionary<string, int> myDictionary = { {"a",1}, {"b",2} };
    

    07-24 16:04