小编sab*_*669的帖子

如何按属性对对象列表进行排序

我有这段代码:

        DataTable dt = new DataTable();

        dt.Columns.Add("Status");
        dt.Columns.Add("File");
        dt.Columns.Add("Revision");
        int i = 0;

        foreach (SvnStatusEventArgs status in statuses) // statuses is a Collection
        {
            dt.Rows.Add();

            switch (status.LocalContentStatus)
            { 
                case SvnStatus.NotVersioned:
                    dt.Rows[i]["Status"] = "Not Versioned";
                    break;
                default:
                    dt.Rows[i]["Status"] = status.LocalContentStatus.ToString();
                    break;
            }

            dt.Rows[i]["File"] = status.Path;

            foreach(SvnInfoEventArgs info in infos) //infos is a Collection
            {
                if (status.Path.Equals(info.Path))
                {
                    dt.Rows[i]["Revision"] = info.Revision;
                    break;
                }
            }

            i++;
        }
Run Code Online (Sandbox Code Playgroud)

statuses并且infos可以在每个高达20K行,然而,我的嵌套的foreach可能需要很长的时间.

如果我将这些集合转换为列表然后尝试对它们进行排序,我想我可以加快速度Path.

查看Sort方法的MSDN页面,我不知道如何比较PathSvnStatusEventArgs [n]和SvnStatusEventArgs [n + 1]中的字段.然后我也开始怀疑,因为我将完全迭代这两组对象并对它们进行排序,这真的比我现有的代码更有效吗?我想它会是n*2而不是n*n,对吗? …

.net c# performance .net-3.5

0
推荐指数
1
解决办法
93
查看次数

是否可以从CPU确定OS位?

我正在开发一个应该能够运行2个脚本中的一个的应用程序,具体取决于运行该应用程序的操作系统是x64还是x86.

搜索过,我遇到了这个帖子:如何用.NET检测Windows 64位平台?

但显然我的老板担心最佳答案可能不适用于所有操作系统'我们的用户将运行(XP/Vista/7).他推荐了这个代码示例:

    private void GetCpuDetails(out string cpuType)
    {
        cpuType = "..."; 

        try
        {
            using (RegistryKey regKey = Registry.LocalMachine)
            {
                using (RegistryKey subRegKey = regKey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"))
                {
                    if (subRegKey.GetValue("ProcessorNameString") != null)
                    {
                        cpuType = subRegKey.GetValue("ProcessorNameString").ToString();
                    }

                    subRegKey.Close();
                }
                regKey.Close();
            }
        }
        catch
        {
            cpuType = "...";
        }
    }
Run Code Online (Sandbox Code Playgroud)

但我不明白你怎么可能从CPU确定操作系统版本.这似乎与使用PROCESSOR_ARCHITECTURE完全相同,因为它基于CPU而不是操作系统获得64位或32位.

c# .net-3.5

0
推荐指数
1
解决办法
68
查看次数

有没有办法在switch语句的单个案例中评估多个条件?

在一个KeyDown事件中,我有以下内容:

        switch (e.KeyCode)
        {
            case Keys.V:
                if (e.Modifiers.Equals(Keys.Control))
                    AddRow();
                break;
            case Keys.Back:
                RemoveRow();
                break;
        }
Run Code Online (Sandbox Code Playgroud)

有没有办法让我的第一次崩溃case所以它会是什么样的case Keys.V && Modifiers.Control?它嵌套在里面看起来真的很难看= [

所有我能找到的都是落空条件,这不是我正在寻找的,因为我正在评估e.KeyCodee.Modifiers.

c# switch-statement

0
推荐指数
1
解决办法
76
查看次数

LINQ Collections.Generic.List.RemoveAll的参数无效

我有这个方法告诉我,我有一些无效的参数,我试图RemoveAll从我的List<SelectListItem>对象调用.我只需要根据简单的条件从下拉列表中删除一些项目.

public JsonResult GetExportTables(CaseListDynExport objCaseListDynExport)
{
    List<SelectListItem> lstExportTablesList = new List<SelectListItem>();
    try
    {
        CaseListDynExportBLL objCaseListDynExportBLL = new CaseListDynExportBLL();

        DataTable dtExportTables = objCaseListDynExportBLL.GetExportTables(objCaseListDynExport);

        lstExportTablesList = DropDownHelper.GetSelectListItem("TableName", "TableExportCode", null, dtExportTables);

        if (objCaseListDynExport.someCondition)
            lstExportTablesList.RemoveAll(lstExportTablesList.Where(l => l.Text.IndexOf("Audit") >= 0));
    }
    catch (Exception ex)
    {
        LogUtility.ErrorException(ex);
    }

    return Json(lstExportTablesList, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

我必须遗漏一些非常明显的东西,但我无法发现我做错了什么.

我看过这些帖子:

但是,是的 无法发现我做错了什么...

.net c# linq

0
推荐指数
1
解决办法
69
查看次数

如何检查一个字符串是否包含另一个字符串中的任何字符?

如何确定中的任何单个字符是否src与中的任何单个字符匹配restricted?我有可以执行此工作的JS方法,但是如果可以的话,我想对其进行改进:

function CheckRestricted(src, restricted)
{
    for (var i = 0; i < src.length; i++)
    {
        for (var j = 0; j < restricted.length; j++)
        {
            if (src.charAt(i) == restricted.charAt(j))
                return false;
        }            
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

如果这是C#,则可以用LINQ在一行中实现:

bool CheckRestricted(string src, string restricted)
{
    return src.Any(s => restricted.Contains(s));
}
Run Code Online (Sandbox Code Playgroud)

我不知道JS中是否有某种类似的功能?

编辑:示例用例:

CheckRestricted("ABCD", "!+-=;:'`"); //true
CheckRestricted("ABCD!", "!+-=;:'`"); //false
Run Code Online (Sandbox Code Playgroud)

它主要用于禁止“特殊字符”。

javascript

0
推荐指数
1
解决办法
823
查看次数

标签 统计

c# ×4

.net ×2

.net-3.5 ×2

javascript ×1

linq ×1

performance ×1

switch-statement ×1