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

C#赋值表达式的值:是左操作数还是右操作数的值?

C#赋值表达式结果的疑惑解答

你提到的疑惑核心在于对C#赋值表达式结果的精准定义——文档之所以表述为“赋值表达式的结果是赋给左操作数的值”,而非直接说“等于右操作数的值”,是因为这是覆盖所有场景的严谨表述,并非冗余。

以下两种场景能体现这种表述的必要性:

  • 类型转换场景
    当右操作数需要转换为左操作数的类型时,赋给左操作数的是转换后的值,可能和原始右操作数的值不同。比如:

    double c = 3.9;
    int b;
    int a = (b = c); // b被赋值为3(double转int截断小数),a的结果也是3,而非c的3.9
    

    此时b = c的结果是赋给b的3,和c的原始值存在差异,文档的表述准确描述了实际行为。

  • 自定义类型的转换逻辑
    如果自定义了类型的隐式/显式转换运算符,赋值时左操作数的值会经过转换逻辑处理,和右操作数原始值不同。比如:

    public class MyNumber
    {
        public int Value { get; set; }
        public static implicit operator MyNumber(int num)
        {
            return new MyNumber { Value = num * 2 };
        }
    }
    
    int c = 5;
    MyNumber b;
    MyNumber a = (b = c); // b.Value为10,a.Value也为10,而c是5
    

    这里b = c的结果是转换后的MyNumber实例,和c的原始值完全不同,文档的表述完美覆盖这类场景。

简言之,文档的表述是为了涵盖所有赋值场景,包括存在类型转换、自定义逻辑的情况。直接说“等于右操作数的值”会遗漏这些特殊场景,而“赋给左操作数的值”才是普适的准确定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:12:15