C# 使具有嵌套ifs的foreach更紧凑、更可读
寻找C#语法,使下面的代码更加优雅、紧凑和可读。带有多个if的foreach占用了太多的空间,看起来也太难看了。我在想LINQ的语法可能 (srSys和desSys是字符串,srFl和desFl是整数。最终版本将具有更好的变量命名)C# 使具有嵌套ifs的foreach更紧凑、更可读,c#,asp.net,.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 4,寻找C#语法,使下面的代码更加优雅、紧凑和可读。带有多个if的foreach占用了太多的空间,看起来也太难看了。我在想LINQ的语法可能 (srSys和desSys是字符串,srFl和desFl是整数。最终版本将具有更好的变量命名) publicstaticwarmodgen(列出地图){ List atMapList=新列表(); foreach(atMaps中的变量a) { AtMap AtMap=新AtMap(); 如果(!string.IsNullOrEmpty(a.srSys)) {
publicstaticwarmodgen(列出地图){
List atMapList=新列表();
foreach(atMaps中的变量a)
{
AtMap AtMap=新AtMap();
如果(!string.IsNullOrEmpty(a.srSys))
{
atMap.srSys=a.srSys;
}
如果(!string.IsNullOrEmpty(a.desSys))
{
atMap.desSys=a.desSys;
}
如果(a.srFl!=null)
{
atMap.srFl=a.srFl;
}
如果(a.desFl!=null)
{
atMap.desFl=a.desFl;
}
添加(atMap);
}
返回新的warMod{AtMapArr=atMapList}
}
编辑:假设函数的整体逻辑似乎只是采用一个名为AtMaps
的列表
类型,然后创建另一个名为AtMapsList>的列表
类型。函数可以是returnnewwarmod{AtMapArr=atMaps}代码>。但是,构造函数仍然可以在制作AtMaps
的部分使用
// Use of constructor to initialize your class (AtMap.cs)
public class AtMap {
public string srSys, desSys;
public int? srFl, desFl;
public AtMap(string srSys, string desSys, int? srFl, int? desFl) {
if (!string.IsNullOrEmpty(a.srSys)) {
this.srSys = a.srSys;
}
if (!string.IsNullOrEmpty(a.desSys)) {
this.desSys = a.desSys;
}
if (a.srFl != null) {
this.srFl = a.srFl;
}
if (a.desFl != null) {
this.desFl = a.desFl;
}
}
}
您可以简单地将if永远隐藏在AtMap类中
public static warMod Gen(List<AtMap> atMaps)
{
List<AtMap> atMapList = new List<AtMap>();
foreach (var a in atMaps)
atMapList.Add(new AtMap(a));
return new warMod { AtMapArr = atMapList };
}
public class AtMap
{
public AtMap(AtMap a)
{
if (!string.IsNullOrEmpty(a.srSys))
srSys = a.srSys;
if (!string.IsNullOrEmpty(a.desSys))
desSys = a.desSys;
if (a.srFl != null)
srFl = a.srFl;
if (a.desFl != null)
desFl = a.desFl;
}
}
publicstaticwarmodgen(列出地图)
{
List atMapList=新列表();
foreach(atMaps中的变量a)
添加(新的AtMap(a));
返回新的warMod{AtMapArr=atMapList};
}
公共类AtMap
{
公共AtMap(AtMap a)
{
如果(!string.IsNullOrEmpty(a.srSys))
srSys=a.srSys;
如果(!string.IsNullOrEmpty(a.desSys))
desSys=a.desSys;
如果(a.srFl!=null)
srFl=a.srFl;
如果(a.desFl!=null)
desFl=a.desFl;
}
}
初始化类时,AtMap字段:srSys和desSys将为空,srFl和desFl(例如:int)将为0。
我想可能是这样的:
public class AtMap
{
public string srSys {get; set;}
public string desSys {get; set;}
public int srFl {get; set;}
public int desFl {get; set;}
}
public static warMod Gen(List<AtMap> atMaps)
{
var atMapList = new List<AtMap>();
foreach (var a in atMaps)
{
var atMap = new AtMap
{
srSys = a.srSys,
desSys = a.desSys,
srFl = a.srFl ?? default(int),
desFl = a.desFl ?? default(int)
};
atMapList.Add(atMap);
}
return new warMod { AtMapArr = atMapList };
}
公共类AtMap
{
公共字符串srSys{get;set;}
公共字符串desSys{get;set;}
公共int srFl{get;set;}
公共整数desFl{get;set;}
}
公共静态warMod Gen(列出地图)
{
var atMapList=新列表();
foreach(atMaps中的变量a)
{
var atMap=新atMap
{
srSys=a.srSys,
desSys=a.desSys,
srFl=a.srFl??默认值(整数),
desFl=a.desFl??默认值(整数)
};
添加(atMap);
}
返回新的warMod{AtMapArr=atMapList};
}
虽然这是一个可能的起点,但如果未设置参数,代码完全忽略了不更新值的点…对构造函数进行null检查“srFl和desFl为ints”是…不需要一个真正的语句。。。您可能需要双重检查代码,以确认以何种方式发布错误信息读取器。这可能应该迁移到AtMap.srSys
和AtMap.desSys
的默认值?是否有任何原因您不能直接返回AtMap
?因为AtMaps
和AtMapsList
都是相同的List
类型
public class AtMap
{
public string srSys {get; set;}
public string desSys {get; set;}
public int srFl {get; set;}
public int desFl {get; set;}
}
public static warMod Gen(List<AtMap> atMaps)
{
var atMapList = new List<AtMap>();
foreach (var a in atMaps)
{
var atMap = new AtMap
{
srSys = a.srSys,
desSys = a.desSys,
srFl = a.srFl ?? default(int),
desFl = a.desFl ?? default(int)
};
atMapList.Add(atMap);
}
return new warMod { AtMapArr = atMapList };
}