Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

`Command` class violates design rule CA1010

オープン
#2,751 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
45/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
停滞
技術スタック
csharp
領域
cli

調査の方向性

src/System.CommandLine/Command.cs のリンクされた宣言から始め、MyCommand の例を使用して、AnalysisMode を Recommended または All に設定した状態で CA1010 を再現します。公開継承するコマンドが CA1010 を出力しなくなり、既存の Command の子要素の動作が維持されていれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Summary

The System.CommandLine.Command class implements non-generic IEnumerable, but it does not implement IEnumerable<T>.

https://github.com/dotnet/command-line-api/blob/cf5fd8d696450a48d3cc75a7a1792d34b5303f88/src/System.CommandLine/Command.cs#L25

This causes classes inheriting from the Command class to violate design rule CA1010.
For projects with AnalysisMode set to Recommended or All, warning CA1010 will occur.

Build succeeded.

/home/smdn/temp/cli/Lib.cs(5,14): warning CA1010: Type 'MyCommand' directly or indirectly inherits 'IEnumerable' without implementing 'IEnumerable<T>'. Publicly-visible types should implement the generic version to broaden usability. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1010) [/home/smdn/temp/cli/cli.csproj]
    1 Warning(s)
    0 Error(s)

This simply triggers a warning and does not corrupt any functionality of System.CommandLine.
However, since the cause of the warning is not easy to find out and it may cause confusion, so I think this should be fixed.

Steps to reproduce

Set AnalysisMode to Recommended or All in the csproj file.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <!-- Enable design rules including CA1010 -->
    <AnalysisMode>Recommended</AnalysisMode>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.CommandLine" Version="2.0.1" />
  </ItemGroup>

</Project>

Create a class that inherits from the Command class.

using System.CommandLine;

namespace MyLibrary;

// warning CA1010: Type 'MyCommand' directly or indirectly inherits 'IEnumerable' without implementing 'IEnumerable<T>'. Publicly-visible types should implement the generic version to broaden usability. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1010)
public class MyCommand(string name, string? description) : Command(name, description) { }

Workarounds

The following workarounds are available to avoid this warning.

Workaround 1: disable warning CA1010

#pragma warning disable CA1010
public class MyCommand(string name, string? description) : Command(name, description)
{
}
#pragma warning restore CA1010

Workaround 2: implement IEnumerator<Symbol>

public class MyCommand(string name, string? description) : Command(name, description)
{
    // Implement IEnumerator<Symbol> in order to suppress warning CA1010.
    public IEnumerator<Symbol> GetEnumerator() => Children.GetEnumerator();
}

Workaround 3: reduce AnalysisMode

    <!-- Reduce `AnalysisMode` to either `None`, `Default`, or `Minimum`. -->
    <AnalysisMode>Minimum</AnalysisMode>
主要言語
C#
スター
3.7k
フォーク
434
平均マージ
4時間 46分
マージ済み PR(30日)
1

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

dotnet/command-line-api のほかの issue

dotnet/command-line-api の issue をすべて見る

似ている issue

C# の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。