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

在C#中创建对象时如何使用if语句?

C# 对象初始化器中能否嵌入if-else语句?

问题描述

你希望在创建TestModel对象时,通过if-else逻辑给不同属性赋值,尝试的代码如下:

var modelObj = new TestModel
{
    Id = id,
    Description = obj.Description,
    if (status == 1)
    {
       Service = obj.Url,
       Username = obj.ServiceUsername,
    }
    else
    {
      Password = obj.Password,
      Token = obj.Token,
      FirstName = obj.FirstName
    }
};

请问这种写法在C#中是否可行?


回答

不行,C#的对象初始化器语法不支持直接在初始化块内部嵌入if-else语句块,编译器会直接报错。你可以用以下几种方式实现需求:

  • 方案一:先初始化基础属性,再分支赋值
    先创建对象并设置通用属性,再通过if-else给不同分支的属性赋值,这是最直观的写法:

    var modelObj = new TestModel
    {
        Id = id,
        Description = obj.Description
    };
    
    if (status == 1)
    {
        modelObj.Service = obj.Url;
        modelObj.Username = obj.ServiceUsername;
    }
    else
    {
        modelObj.Password = obj.Password;
        modelObj.Token = obj.Token;
        modelObj.FirstName = obj.FirstName;
    }
    
  • 方案二:使用条件运算符(三元表达式)
    如果属性数量不多,可以用三元表达式给单个属性赋值,但多属性时可读性会下降:

    var modelObj = new TestModel
    {
        Id = id,
        Description = obj.Description,
        Service = status == 1 ? obj.Url : null,
        Username = status == 1 ? obj.ServiceUsername : null,
        Password = status != 1 ? obj.Password : null,
        Token = status != 1 ? obj.Token : null,
        FirstName = status != 1 ? obj.FirstName : null
    };
    

    注意:这里假设未赋值的属性允许为null,如果是值类型需要设置默认值(比如default)

  • 方案三:封装工厂方法
    如果这个对象创建逻辑需要重复使用,或者逻辑更复杂,可以把创建逻辑封装成静态工厂方法,代码更整洁易维护:

    public static class TestModelFactory
    {
        public static TestModel Create(int id, YourObjType obj, int status)
        {
            var model = new TestModel
            {
                Id = id,
                Description = obj.Description
            };
    
            if (status == 1)
            {
                model.Service = obj.Url;
                model.Username = obj.ServiceUsername;
            }
            else
            {
                model.Password = obj.Password;
                model.Token = obj.Token;
                model.FirstName = obj.FirstName;
            }
    
            return model;
        }
    }
    
    // 使用方式
    var modelObj = TestModelFactory.Create(id, obj, status);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:06:28