标签: generic-list

List.Contains()的循环实现看起来比内置的快.是吗?如果是这样,为什么?

(这个问题来自于此处开始的讨论)

我是比较时机与寻找true一个值List<bool>使用List.Contains()与那些手卷循环.

我看到其他人报道的结果不同.我已经在几个系统上尝试过它,在我尝试过的所有系统上,循环看起来要快2到3.5倍.这些系统的范围从运行XP.4的笔记本电脑到运行Windows 8和.Net 4.5的最新PC.

其他人报告的结果不同,即List.Contains()与循环速度大致相同或略快于循环.

这是我的测试代码.

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main()
        {
            int size = 10000000;
            int count = 10;
            List<bool> data = new List<bool>(size);

            for (int i = 0; i < size; ++i)
                data.Add(false);

            var sw = new Stopwatch();

            for (int trial = 0; trial < 5; ++trial)
            {
                sw.Restart();

                for (int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c# optimization generic-list

12
推荐指数
1
解决办法
2053
查看次数

如何在不更改相同列表的情况下反转通用列表?

我有一个通用列表,正在被调用4次的方法中使用.此方法使用此通用列表的值在PDF中写入表.

我的问题是我需要在方法中反转这个通用列表,但我调用方法4次,所以每次调用方法时列表都被反转,我不想要...我该怎么做?有没有办法扭转列表而不改变原始?

这是在方法内:

t.List.Reverse();
foreach (string t1 in t.List)
{
    //Some code
}
Run Code Online (Sandbox Code Playgroud)

c# reverse generic-list

12
推荐指数
2
解决办法
1万
查看次数

为什么列表中的额外复制<T> .AddRange(IEnumerable <T>)?

我正在查看System.Collections.Generic.List <T>的开源代码.该AddRange(IEnumerable<T>)方法如下所示:

public void AddRange(IEnumerable<T> collection) {
     Contract.Ensures(Count >= Contract.OldValue(Count));

     InsertRange(_size, collection);
}
Run Code Online (Sandbox Code Playgroud)

这些InsertRange(int, IEnumerable<T>)方法看起来像这样:

public void InsertRange(int index, IEnumerable<T> collection) {
    if (collection==null) {
        ThrowHelper.ThrowArgumentNullException(ExceptionArgument.collection);
    }

    if ((uint)index > (uint)_size) {
        ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index);
    }
    Contract.EndContractBlock();

    ICollection<T> c = collection as ICollection<T>;
    if( c != null ) {
        int count = c.Count;
        if (count > 0) {
            EnsureCapacity(_size + count);
            if (index < _size) {
                Array.Copy(_items, index, _items, index + count, _size - index); …
Run Code Online (Sandbox Code Playgroud)

.net c# generics performance generic-list

12
推荐指数
1
解决办法
187
查看次数

什么是"现代"的方式来找到两个列表<T>对象中的常见项目?

我有一个包含两个不同类型泛型列表,例如着想,让他们打电话ProductsEmployees.我正在尝试找到与员工位于同一位置的产品,即在哪里product.SiteId == emp.SiteId

List<Product> lstProds;
List<Employees> lstEmps;
Run Code Online (Sandbox Code Playgroud)

我的(老skool)大脑告诉我使用forEach循环找到匹配但我怀疑有一个('更好'/更快/更快?)的方式来使用Linq.任何人都可以照亮我吗?我在网上找到的所有例子都涉及原语列表(字符串/整数),并没有特别有用.

c# linq linq-to-objects generic-list

10
推荐指数
1
解决办法
9477
查看次数

将List.FindAll()与lambda一起使用的VB.NET语法是什么?

在C#中,我一直在通用列表中执行FindAll,如下所示:

List<group.category> tlist = list.FindAll(p => p.parid == titem.catid);
Run Code Online (Sandbox Code Playgroud)

两个问题,这是执行这样的事情的适当方式,我如何将其转换为VB.Net

c# vb.net predicate generic-list findall

10
推荐指数
1
解决办法
8511
查看次数

为什么List <>实现了IList

可能重复:
为什么(它真的吗?)列表实现所有这些接口,而不仅仅是IList?

出于好奇,通用List <>实现非通用接口IList的原因是什么?

示例代码

IList<int> list = new List<int>();
list.Add(1);

//compiles but ArgumentException thrown at run time
((IList)list).Add(new object()); 
Run Code Online (Sandbox Code Playgroud)

.net c# ilist generic-list

9
推荐指数
1
解决办法
2680
查看次数

构建linq查询以获得最快性能的正确方法?

这里也提出了类似的问题,但没有一个符合我的需要.
我做了测试用例,看看哪个更快.但我觉得我的linq代码仍然很慢.如何构建linq代码以获得更快的性能?

其他人说使用double .Tolist()会导致操作变慢,当我测试它时,它表明它比任何其他测试都快.

测试:

Preparation
---------------------------------------------------------------
return Properties of UserInfo(userinf, true){
    UserID = userinf.UserID;
    FirstName = userinf.user.FirstName;
    MiddleName = userinf.user.MiddleName;
    LastName = userinf.user.LastName;
    LoginID = userinf.user.LoginID;
    Birthday = userinf.Birthday;
}

skip = 0;
take = 100;

total table records = 304;

Linq to Entity Framework 
Run Code Online (Sandbox Code Playgroud)

提琴手:v2.4.0.0

https://127.0.0.1/..../RetrieveUserInfo?skip=0&take=100
{
    "client":{
        "SessionID":"5433ab64-7e0d-444f-b886-a901ea9a0601"
    },
    "session":{
        "SessionID":"35b75daa-25ad-45a4-9f99-0e69ec3b66a4"
    }
}
Run Code Online (Sandbox Code Playgroud)
//Test 1
//1) 00:00:15.3068755 -- Attempt1
//2) 00:00:13.8207905 -- Attempt2
//3) 00:00:16.2489294 -- Attempt3

var list = (from usr in dbase.userinfoes
            select usr).OrderBy(i …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework generic-list

9
推荐指数
1
解决办法
6312
查看次数

JSON 值无法转换为 System.Collections.Generic.List

我正在尝试列出游戏中的所有项目,using System.Text.Json; 我对使用 .json 文件非常陌生,我尝试这样做来测试它是否有效:

            List<Item> AllItems = new List<Item>();
            string json = File.ReadAllText("Items.json");
            AllItems = Deserialize<List<Item>>(json);
            WriteLine(AllItems[0].Name);
Run Code Online (Sandbox Code Playgroud)

它不允许我将其转换为列表这是 json 文件

{
  "Item": [
    {
      "Weapon": [
        {
          "CritChance": 60,
          "HitChance": 80,
          "OGDamge": 15,
          "Damage": 15,
          "Damage_Type": "Physical",
          "Weapon_Type": "Fist",
          "Player": null,
          "APUsage": 4,
          "ID": 1,
          "Name": "Debug",
          "Value": 16,
          "Rarity": "Common",
          "Item_Type": "Weapon"
        },
        {
          "CritChance": 40,
          "HitChance": 70,
          "OGDamge": 15,
          "Damage": 15,
          "Damage_Type": "Electric",
          "Weapon_Type": "Bow",
          "Player": null,
          "APUsage": 5,
          "ID": 2,
          "Name": "Debug2",
          "Value": 15,
          "Rarity": …
Run Code Online (Sandbox Code Playgroud)

c# json generic-list

9
推荐指数
1
解决办法
5万
查看次数

如何检测C#4.0中通用列表的添加?

我有一个List<Location>被调用的子类LocationList.这是我们添加其他属性的便捷方式(IsExpanded比如我们可以在UI中使用的那些.足够好.但是现在,我们希望每个位置都知道它的父级.因此,我们需要在某些事情时得到通知添加到LocationList,但你不能覆盖AddRemove.虽然我们可以使用ObservableCollection,这更像是一个View/ViewModel构造.这是纯模型数据.

当然我们可以在将父项添加到集合时手动设置父项,但我讨厌这样的非自动化逻辑,因为没有什么可以正确地强制执行它的集合.让集合(好吧,List)自动说'嘿......你被添加了,所以我将你的父母设置为拥有我的班级."就是我所追求的.

我的想法是代替子类List<Location>而不是创建一个List<Location>内部使用的直接类,然后我可以简单地公开我自己的添加/删除方法并处理那里的'父'的调整.但是,这样做会导致内部集合无法枚举,因为它在内部.

也就是说,是否有任何方法可以监听更改List<Location>,或者至少将其IEnumerable包装对象的接口委托给其包装器?

c# ienumerable list generic-list

8
推荐指数
1
解决办法
2721
查看次数

当param类型为List <BaseClass>时,如何传递List <DerivedClass>?

我如何传递一个列表,该列表是一个DerivedObjects列表,其中Method期望一个BaseObjects列表.我正在转换列表.ToList<BaseClass>(),我想知道是否有更好的方法.我的第二个问题是语法不正确.我试图传递列表byref,我收到一个错误:'ref' argument is not classified as a variable

我该如何解决这两个问题?谢谢.

public class BaseClass { }
public class DerivedClass : BaseClass { }

class Program
{
    static void Main(string[] args)
    {
        List<DerivedClass> myDerivedList = new List<DerivedClass>();
        PassList(ref myDerivedList.ToList<BaseClass>());
// SYNTAX ERROR ABOVE IS - 'ref' argument is not classified as a variable

        Console.WriteLine(myDerivedList.Count);
    }

    public static void PassList(ref List<BaseClass> myList)
    {
        myList.Add(new DerivedClass());
        Console.WriteLine(myList.Count);
    }
}
Run Code Online (Sandbox Code Playgroud)

解决了:

类似的方法解决了我的问题.

public static void PassList<T>(ref List<T> myList) where T : BaseClass
{ …
Run Code Online (Sandbox Code Playgroud)

c# ref generic-list derived-class

8
推荐指数
2
解决办法
4636
查看次数