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

属性set方法中使用switch处理不同类型值的类型转换问题

问题分析与修复

你的代码存在三个核心问题,直接导致报错和潜在运行时崩溃:

  1. 类型不匹配:构造函数传入字符串参数,直接赋值给bool类型的属性InpVariable,C#不允许字符串与布尔值的隐式转换,因此触发"无法将字符串类型隐式转换为布尔类型"的错误。
  2. 无限递归:属性InpVariable的get方法返回自身(return InpVariable;),运行时会不断递归调用,最终导致栈溢出。
  3. 语法错误:switch分支的case "No"后多写了一个分号,属于无效语法。

修复后的代码方案

方案1:构造函数内直接处理字符串转换

private bool inpVariable;

// 修正属性的get/set逻辑,直接操作私有字段
private bool InpVariable
{
    get { return inpVariable; }
    set { inpVariable = value; }
}

public inpClass(string inpVariable)
{
    // 统一转小写并去除首尾空格,避免大小写或空格导致匹配失败
    var input = inpVariable?.Trim().ToLower() ?? "";
    switch (input)
    {
        case "yes":
            InpVariable = true;
            break;
        case "no":
            InpVariable = false;
            break;
        default:
            InpVariable = false; // 可根据业务需求改为抛出异常
            break;
    }
}

方案2:封装转换方法(提升复用性)

private bool inpVariable;

private bool InpVariable
{
    get { return inpVariable; }
    set { inpVariable = value; }
}

// 封装字符串转布尔值的方法,可在其他场景复用
public void SetInpVariable(string input)
{
    inpVariable = input?.Trim().Equals("Yes", StringComparison.OrdinalIgnoreCase) ?? false;
}

public inpClass(string inpVariable)
{
    SetInpVariable(inpVariable);
}

关键注意点

  • 必须让属性的get返回私有字段,避免递归调用导致栈溢出。
  • 字符串转换时建议忽略大小写并去除空格,提升输入兼容性。
  • 默认值可根据需求调整,比如输入非"Yes"/"No"时抛出ArgumentException,而非直接设为false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:45:34