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

C#类间传值异常:传入值后仍返回0,期望结果30求助

问题排查与修复方案

嘿,我一眼就看到问题出在哪了——你在调用Calculate方法的时候,传进去的是一个全新的、没赋值的Book对象,而不是你之前已经设置了价格的那个实例!

具体问题拆解:

  • 你在Main里确实创建了num这个Book实例,还给它的Price和Price2分别设了10和20:
    var num = new Book();
    var checkNum = num.Price = 10;
    var checkNum2 = num.Price2 = 20;
    
  • 但后面调用Calculate时,你写的是result.Calculate(new Book())——这个new Book()是一个完全新的对象,它的Price和Price2都是值类型的默认值0,所以计算出来的结果肯定是0+0=0,和你预期的30差远了。

修复后的代码:

只需要把已经赋值好的num实例传给Calculate就行,修改后代码如下:

public class Product { public string Title { get; set; } public int Price { get; set; } }
public class Book : Product { public string Isbn { get; set; } public int Price2 { get; set; } }
public class Check : Book { 
    public int Num; 
    public int Num2; 
    public int Calculate(Book product) { 
        Num = product.Price; 
        Num2 = product.Price2; 
        Console.WriteLine(Num2); 
        return Num + Num2; 
    } 
}
class Program { 
    static void Main(string[] args) { 
        var num = new Book(); 
        num.Price = 10; // 这里可以简化,不用额外变量接收赋值结果
        num.Price2 = 20; 
        var result = new Check(); 
        var total = result.Calculate(num); // 传入已经赋值好的num实例
        Console.WriteLine(total); // 输出30,符合预期
        Console.WriteLine(result.Num); // 输出10
        Console.WriteLine(result.Num2); // 输出20
    } 
}

额外小提示:

  • 你写的var checkNum = num.Price = 10;语法没问题,但checkNum其实就是10,如果你不需要这个变量,直接写num.Price = 10;会更清晰。
  • 另外,Check类继承了Book,但又在Calculate里接收Book参数,这个设计有点奇怪——如果Check只是用来计算价格的工具,其实没必要继承Book,改成独立的工具类会让代码职责更明确哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:32:21