为什么我在终端上运行时看不到我用C#in VS代码编写的程序的输出

为什么我在终端上运行时看不到我用C#in VS代码编写的程序的输出,c#,visual-studio-code,C#,Visual Studio Code,我是C#的新手,我正在做一些简单的VS代码练习 我有一个颜色数组和一个返回输入颜色对应索引的方法(电阻颜色练习) 当我在终端上运行程序时,我想看到程序的结果,但什么都没有显示 例如,当我选择“brown”作为方法的输入时,我希望在终端中看到1 如果有人能检查我写的代码有什么问题,我将不胜感激 using System; public class ResistorColor { private void Main(string[] args) { int a =

我是C#的新手,我正在做一些简单的VS代码练习

我有一个颜色数组和一个返回输入颜色对应索引的方法(电阻颜色练习)

当我在终端上运行程序时,我想看到程序的结果,但什么都没有显示

例如,当我选择“brown”作为方法的输入时,我希望在终端中看到1

如果有人能检查我写的代码有什么问题,我将不胜感激

using System;

public class ResistorColor
{
    private void  Main(string[] args)
    {
        int a = ColorCode("brown");
        Console.WriteLine(a.ToString());
    }

    public static string[] colors = {"black", "brown", "red", "orange", "yellow", "green", "blue", "violet", "grey", "white"};
    public static int ColorCode(string color)
    {
       return Array.IndexOf(colors, color);
    }

    public static string[] Colors()
    {
        return colors;
    }

}

您还需要添加
ReadLine
以查看输出:

...
Console.WriteLine(a.ToString());
Console.ReadLine();

看起来您有两个
Main
方法;您在问题中展示的实例
Main
方法,以及一个名为
Main
static
方法

测试这一点的一个快速方法是简单地将
Main
方法重命名为其他方法(
Main2
可能;命名很难!);如果代码仍然可以编译,它就永远不是入口点



要成为“入口点”(即运行exe时运行的对象),方法必须是
静态的
(称为
Main
,并具有合适的签名,例如
void Main(string[])
,尽管允许许多其他签名),因此,问题中显示的代码只是一个方法,它恰好被称为
Main
。运行exe时运行的实际代码可能位于不同的文件中,通常为
Program.cs
,并且可能为空。

我假定您正在处理从下载的项目。
这些项目是测试项目。这意味着它们不应该定义任何
Main
方法。测试项目内部已经有了某种
Main
方法
无论如何,如果要将该项目转换为可以运行的控制台项目,则应:

1.删除对测试库的引用。 当前,您的
.csproj
文件包含以下行:

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
3-对
Main
方法使用有效签名: 对于
Main
存在一些有效的签名,并且在所有这些签名中,它应该是
static

你完了! 现在您可以运行:
dotnet run
并查看输出

更新:
您可能安装了不同版本的.net core sdk。因此,不要从我编写的代码片段中复制它的值,请坚持使用您已有的版本。这些片段只是为了解释。

在csproj中,输出类型是什么?是不是
Exe
?或者它可能是
WinExe
?顺便说一句,发布代码的图像真的不是一个好主意-a)我们不能复制/粘贴它来尝试复制东西,b)这对可访问性真的很不利;只要有可能,将代码作为文本发布也是非常可取的:解决方案中是否有另一个文件,通常称为
Program.cs
?C#的入口点通常是一个名为
Main
static
方法,但您的
Main
方法是实例(而不是
static
)。这让我觉得我们所关注的不是入口点,还有另一个
Main
方法,就是你实际运行的方法,它实际上是确凿的证据,证明问题正是我在下面的回答中所说的;所以在某个地方有另一个代码文件,它使用名为
Main
static
方法。我从这里找不到它,原因很明显——你得看看,但是:它就在那里!搜索“Main”应该可以找到it@ShahryarSaljoughi当我将static添加到Main方法时,它给出了以下错误:错误CS0017:程序定义了多个入口点。使用/main编译以指定包含入口点的类型。尽管文件中没有其他主文件!在我能想到的几乎每一个场景中:不,你真的没有<代码>控制台。WriteLine本身工作正常;如果您一个接一个地使用输入键/字节,则会出现一些奇怪的计时问题,但是。。。事实并非如此here@MarcGravell我认为这里的要点是在写入控制台后暂停应用程序,这样控制台就不会立即关闭自己。使用
Console.ReadLine()是一种基本的方法this@Rafalon如果您从终端运行东西,就像这里的情况一样(请参阅
dotnet运行
等),同一个终端通常用于输出,因此:这不是问题
<PropertyGroup>
   <OutputType>Exe</OutputType>
   <TargetFramework>netcoreapp3.1</TargetFramework>
 </PropertyGroup>