c#如何在项目中声明一个静态的List对象?(给出思路即可)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何在项目中声明一个静态的List对象?(给出思路即可)相关的知识,希望对你有一定的参考价值。

不一定是一个list对象,但一定是一个引用对象而不是值类型。我尝试过声明静态类,但是静态类里面声明的静态对象,即使在静态类里面,我都不能对这个List做操作 。。
不知道我的意思有没有表述清楚

你是不是忘了把你要调用静态对象的那个方法也声明为静态的?
或者是你再用一个实例(instance)去尝试调用静态对象?

例如:
public static class Test
public static IList<int> iList = new List<int>(100);
public static void MethodA()
// coding...
iList.Add(0); // 这样是可以的。静态方法中访问静态成员

public void MethodB()
// coding...
MethodA(); // 这样是【错误】的。在非静态方法里尝试访问静态成员
iList.Add(1); // 这样是【错误】的。道理一样



public class TryGo
public void Go()
Test.MethodA(); // 这样可以访问,通过类名直接访问静态方法
Test.iList.Add(2); // 这样可以访问,通过类名访问静态属性
Test t = new Test();
t.MethodB(); // 这样可以访问,通过实例访问非静态成员
t.MethodA(); // 这样是【错误】的,实例不能访问静态成员
t.iList.Add(3); // 这样是【错误】的,实例不能访问静态成员

参考技术A 对于静态对象,需要在静态构造函数里面初始化。 参考技术B 厄。。。不可能把。。。
随便在一个类里面声明 static list<>不就行了? 当然要注意你的类 和 你的变量的 作用域
参考技术C 你想做什么操作说来看看.

删除项目在列表 C# 中具有相同的键 [重复]

【中文标题】删除项目在列表 C# 中具有相同的键 [重复]【英文标题】:Remove Item have same key in List C# [duplicate] 【发布时间】:2013-04-05 08:33:30 【问题描述】:

我有一个List&lt;Object&gt; n Objects。 在 n 个对象中,有一些对象具有相同的 Id。 示例List&lt;T&gt; = t1, t2, t3, t4, t5....,t10.

假设:

t1.Id = t5.id

所以我想从 List 中删除 t5

谁能帮帮我。

在这个问题中:using LINQ to remove objects within a List 你知道对象重复(例如:“bob”),但在我的问题中,在这个列表中,我不知道之前有任何对象重复。

【问题讨论】:

您是否尝试过任何方法来解决您的问题?首先展示你的努力.. 您可能想查看System.Collections.Generic.Dictionary class,除非您的家庭作业/作业绝对需要您使用List 我是 LINQ 新手。我尝试使用 2 for 循环,但此解决方案未优化。 如果您需要最佳解决方案:此类问题最好使用Dictionary 解决(如上所述)。 Dictionary 不允许您使用相同的键添加多个数据,并且查找键的速度非常快。 【参考方案1】:

仅使用 LINQ to Objects:

source = source.GroupBy(t => t.id).Select(g => g.First()).ToList();

【讨论】:

+1 来自我。也正确,如果你不够懒惰使用现有的实现) @lazyberezovsky 我认为只为一个DistinctBy 调用加载整个moreLinq assemble 可能有点过头了。这就是为什么我首先发布了 LINQ to Objects 的答案。 哇。你是对的,没有 Distinct(谓词)。当然应该有。我认为有的原因当然是因为我创建了自己的 :D go figure。【参考方案2】:

你可以使用moreLinq(从NuGet获取)扩展DistinctBy

var result = list.DistinctBy(x => x.Id).ToList();

【讨论】:

投反对票的原因是什么? 我没有投反对票,但Distinct 没有理由选择第一个,因为它是使用哈希集或类似方法实现的。既然他特意要求删除t5,你需要保证。无论如何,这是我最初的反应。不知道这就是你被否决的原因。 实际上,DistinctBy 并非如此。也许这不是当时投反对票的原因。 @LasseV.Karlsen DistnctBy 描述为If a key is seen multiple times, only the first element with that key is returned. @LasseV.Karlsen 你可以看看DistinctBy implementation,你会看到它会返回第一个。【参考方案3】:

试试这个:

list.RemoveAll(input => list.Count(i => i.Id == input.Id) > 1);

【讨论】:

【参考方案4】:
var res = items.GroupBy(item => item.Id).Select(item2 => item2.First()).ToList();

【讨论】:

以上是关于c#如何在项目中声明一个静态的List对象?(给出思路即可)的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 静态类

C#中静态字段声明时赋值与构造函数中赋值

C#非静态的字段、方法或属性要求对象引用

如何在 Visual Studio 2012 中使一个类完全静态,这样它就不会出现任何错误? - C# [关闭]

C# 语法 ( 扩展方法 )

如何在 C# 中迭代​​ JSON 并将每个对象添加到 List?