You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#调用非静态方法时出现“Cant convert void to object”错误求助

解决你的C#方法调用问题

嘿,我完全懂你的困扰!你说得太对了——不能把无返回值(void)的非静态方法当作有返回值的对象来调用,这就是你遇到错误的根源。而且你说得没错,把实例变量设为public确实是不良实践,完全没必要那么做,咱们换个正确的方式就行!

先理清楚问题:你大概率是写了类似这样的错误调用代码:

// 错误!DisplayDate是void方法,不能当作参数传给Console.WriteLine
Console.WriteLine(In1.DisplayDate());

而正确的做法是,直接调用void方法就好,不用把它当作有返回值的表达式来使用。同时,保持你的Date类的封装性(把实例变量设为private),让DisplayDate()方法自己完成输出工作。

给你一个完整的正确实现示例:

Date类的正确封装实现

public class Date
{
    // 把实例变量设为private,符合封装原则
    private int _month;
    private int _day;
    private int _year;

    // 构造函数初始化变量
    public Date(int month, int day, int year)
    {
        _month = month;
        _day = day;
        _year = year;
    }

    // 无返回值的方法,直接完成输出逻辑
    public void DisplayDate()
    {
        Console.WriteLine($"{_month}/{_day}/{_year}");
    }
}

正确调用方式

class DateTest
{
    static void Main(string[] args)
    {
        Date In1 = new Date(7, 4, 2004);
        Date In2 = new Date(11, 1, 2003);
        
        // 直接调用void方法,不需要赋值或当作参数传递
        In1.DisplayDate();
        In2.DisplayDate();
    }
}

这样一来,你既不用让方法返回值,又保持了类的封装性(外部代码不能随意修改Date的内部变量),完美避开了不良实践。你真的没犯什么低级错误,只是对void方法的调用规则有点混淆而已~

内容的提问来源于stack exchange,提问作者idksoiputthis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:33:56