C# 中的 Diamond 语法

2024-02-02

Java 7 现在有这种“钻石语法”,我可以在其中执行类似的操作ArrayList<int> = new ArrayList<>();

我想知道 C# 是否有我可以利用的类似语法。
例如,我有一个课程的这一部分:

class MyClass
{
    public List<double[][]> Prototypes; // each prototype is a array of array of doubles

    public MyClass()
    {
        Prototypes = new List<double[][]>; // I'd rather do List<>, in case I change the representation of a prototype later
    }
}

有谁知道这是否可能,如果可以,我该如何使用它?


不,没有什么比 C# 中的菱形语法更相似的了。最接近的你可能会得到这样的东西:

public static class Lists
{
    public static List<T> NewList<T>(List<T> ignored)
    {
        return new List<T>();
    }
}

Then:

public MyClass()
{
    ProtoTypes = Lists.NewList(ProtoTypes);
}

这只是使用普通的泛型类型推断来获取方法T。请注意,value参数的类型被完全忽略——只有编译时类型才是重要的。

我个人认为这非常丑陋,我会直接使用构造函数。如果你改变类型ProtoTypes编译器会发现差异,并且不需要很长时间就能修复它......

编辑:要考虑的两种选择:

  • 类似的方法,但带有out范围:

    public static class Lists
    {
        public static void NewList<T>(out List<T> list)
        {
            list = new List<T>();
        }
    }
    
    ...
    
    Lists.NewList(out ProtoTypes);
    
  • 相同的方法,但作为扩展方法,名称为New:

    public static class Lists
    {
        public static List<T> New<T>(this List<T> list)
        {
            return new List<T>();
        }
    }
    
    ...
    
    ProtoTypes = ProtoTypes.New();
    

与这两种方法相比,我更喜欢第一种方法:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的 Diamond 语法 的相关文章

随机推荐