在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
相关产品推荐
相关产品推荐

