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

C#中能否比较方法返回值与变量值?方法内调用方法比较疑问

问题原因

你的校验逻辑失败和「方法内部调用其他方法做值比较」的写法没有关系,核心是两个硬错误:

  • 类型不匹配:Card()方法中定义的password变量是int类型,而Pin()方法的返回值是string类型,C#中这两种类型直接用==比较永远不会得到相等结果,编译阶段就会抛出类型不匹配异常。
  • 输入逻辑重复冲突:Card()方法里先调用了Console.ReadLine()等待用户输入一整行内容并回车,执行完这行才会进入Pin()方法的逐位按键读取逻辑,相当于要求用户连续输两次密码,两次输入的内容分别存在两个变量里,根本不可能完成同一次输入的校验。

另外你的Pin()方法还有个交互小问题:用Console.WriteLine('*')输出掩码会导致每输入一位数字就换一行,不符合常规密码输入的交互习惯。

修复方式
  1. 删掉多余的Console.ReadLine()输入逻辑,密码输入统一走Pin()方法,全程用字符串类型存密码,不要转成int——转int会丢失密码开头的0,比如正确密码是0012转成int会变成12,直接导致合法密码校验失败。
  2. 把Pin()里输出掩码的Console.WriteLine改成Console.Write,避免逐位换行,有需要可以加退格删除的逻辑,优化输入体验。

修复后的完整参考代码:

// 预存正确密码,用字符串类型保留前导零
private const string RealPassword = "1234";

public static string Pin(int size = 4) {
    StringBuilder sb = new StringBuilder(size);
    
    while (sb.Length < size) {
        var key = Console.ReadKey(true);
        
        if (key.KeyChar >= '0' && key.KeyChar <= '9') {
            sb.Append(key.KeyChar);
            Console.Write('*');
        }
        // 支持退格删除已输入内容
        else if (key.Key == ConsoleKey.Backspace && sb.Length > 0) {
            sb.Remove(sb.Length - 1, 1);
            Console.Write("\b \b");
        }
    }
    Console.WriteLine();
    return sb.ToString(); 
}

static void Card() {
    Console.WriteLine("Enter the 4 Digits Password");
    string inputPwd = Pin();

    if (inputPwd == RealPassword) {
        // 此处写校验通过后的业务逻辑
    }
}

内容的提问来源于stack exchange,提问作者João Silva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:18:23