Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使具有嵌套ifs的foreach更紧凑、更可读_C#_Asp.net_.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 使具有嵌套ifs的foreach更紧凑、更可读

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)) {

寻找C#语法,使下面的代码更加优雅、紧凑和可读。带有多个if的foreach占用了太多的空间,看起来也太难看了。我在想LINQ的语法可能

(srSys和desSys是字符串,srFl和desFl是整数。最终版本将具有更好的变量命名)

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 };
}