相关疑难解决方法(0)

为什么C#集合初始化程序以这种方式工作?

我正在查看C#集合初始化程序,发现实现非常务实,但也与C#中的任何其他内容完全不同

我能够创建这样的代码:

using System;
using System.Collections;

class Program
{
    static void Main()
    {
        Test test = new Test { 1, 2, 3 };
    }
}

class Test : IEnumerable
{
    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }

    public void Add(int i) { }
}
Run Code Online (Sandbox Code Playgroud)

由于我满足了编译器(已实现IEnumerable和a public void Add)的最低要求,因此无效,但显然没有价值.

我想知道是什么阻止了C#团队创建更严格的要求?换句话说,为了编译这种语法,为什么编译器不要求类型实现ICollection?这似乎更符合其他C#功能的精神.

c# collections

57
推荐指数
2
解决办法
1万
查看次数

自定义集合初始化器

可以像以下示例中那样初始化实现IEnumerable和提供public void Add(/* args */)函数的类:

List<int> numbers = new List<int>{ 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

Add(int)在初始化之后调用函数3x List<int>.

有没有办法明确地为我自己的类定义这种行为?例如,我可以让初始化程序调用除适当的Add()重载之外的函数吗?

c#

48
推荐指数
1
解决办法
1万
查看次数

不寻常的 C# 语法

我有一些我不明白的 C# 代码:

        CliRootCommand _outerCommand = new CliRootCommand
        {
            new CliCommand("inner")
            {
                new CliOption<string>("--optionOne"),
                new CliOption<string>("--optionTwo")
            }
        };
Run Code Online (Sandbox Code Playgroud)
  1. CliRootCommand _outerCommand = new CliRootCommand
    
    Run Code Online (Sandbox Code Playgroud)

    CliRootCommand实例化?的新实例 如果是,为什么它不需要()在最后(请注意,即使我添加了它,它的工作方式也完全相同())?

  2. { }第一行后面的内容有什么作用?如果它在丢失的内部(),那么它将传递一个对象作为构造函数的参数,CliRootCommand但情况并非如此

c# syntax

1
推荐指数
1
解决办法
100
查看次数

标签 统计

c# ×3

collections ×1

syntax ×1