在 C# 中调用非静态方法时"Cant convert void to object"错误



我相信我会遇到此错误,因为当方法不返回值时,我不能将非静态方法称为对象。但是问题是我不想返回一个值。公开我的实例变量并跳过DisplayDate()方法可能会起作用,但我不必这样做,这也是不良的做法。我确定我犯了一个愚蠢的错误。

class DateTest
{
    static void Main(string[] args)
    {
        Date In1 = new Date(7, 4, 2004);
        Date In2 = new Date(11, 1, 2003);
        Console.WriteLine("The initial date is: ", In1.DisplayDate());
    }
}

class Date
{
    private int Month { get; set; }
    private int Day { get; set; }
    private int Year { get; set; }
    public Date(int M, int D, int Y)
    {
        Month = M;
        Day = D;
        Year = Y;
    }
    public void DisplayDate()
    {
        Console.WriteLine($"{Month}/{Day}/{Year}");
    }
}

这里有两个问题,一个是DisplayDate()不返回任何值,而您将其作为参数传递。这将导致该函数被执行,并通过参考传递返回值。但是,由于该方法是无效的,因此根本不可能具有返回值,因此无法编译。

其次,在格式字符串中,您未指定值的插入点,例如{0}

我建议您像这样构建您的代码。

        class DateTest
        {
            static void Main(string[] args)
            {
                Date In1 = new Date(7, 4, 2004);
                Date In2 = new Date(11, 1, 2003);
                Console.WriteLine("The initial date is: {0}", In1.DisplayDate());
            }
        }

        class Date
        {
            private int Month { get; set; }
            private int Day { get; set; }
            private int Year { get; set; }
            public Date(int M, int D, int Y)
            {
                Month = M;
                Day = D;
                Year = Y;
            }
            public string DisplayDate()
            {
                return $"{Month}/{Day}/{Year}";
            }
        }

顺便说一句,在框架类中输出控制台并不是一个好习惯,因为它紧密地耦合并限制了它们的可用性。

更改:

Console.WriteLine("The initial date is: ", In1.DisplayDate());

to:

Console.Write("The initial date is: ");
In1.DisplayDate();
Console.WriteLine();

更改

Console.WriteLine("The initial date is: ", In1.DisplayDate());

to

In1.DisplayDate();
//this is inise Date class
 public void DisplayDate()
 {
   Console.WriteLine($"The initial date is: {Month}/{Day}/{Year}");
 }
Console.WriteLine(, //some kind of object here, cannot be void);

不确定您要做什么,但下面是工作。

static void Main(string[] args)
      {
         Date In1 = new Date(7, 4, 2004);
         Date In2 = new Date(11, 1, 2003);
         In1.DisplayDate();
         Console.ReadLine();
         //Console.WriteLine("The initial date is: ", In1.DisplayDate());
      }

最新更新