我正在玩LINQ来了解它,但是当我没有一个简单的列表时,我无法弄清楚如何使用Distinct(一个简单的整数列表很容易做到,这不是问题).我想在对象的一个或多个属性上使用对象列表中的区别?
示例:如果对象是Person,则使用Property Id.如何获取所有Person并使用对象Distinct的属性Id?
Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到Person1和Person3?那可能吗?
如果LINQ不可能,那么Person在.NET 3.5 中依赖于某些属性的列表最好的方法是什么?
所以我有一组对象.确切的类型并不重要.从中我想提取一对特定属性的所有唯一对,因此:
myObjectCollection.Select(item=>new
{
Alpha = item.propOne,
Bravo = item.propTwo
}
).Distinct();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:在这种情况下会不会使用默认对象equals(这对我来说没用,因为每个对象都是新的)或者可以告诉它做一个不同的equals(在这种情况下,Alpha和Bravo的值相等) =>相等的实例)?有没有办法实现这个结果,如果不这样做的话?
我想在字典中找到一个键并在找到它时替换该值,或者如果不是则添加键/值.
码:
public class MyObject
{
public string UniqueKey { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
LINQ解决方案(抛出An item with the same key has already been added.):
Dictionary<string, MyObject> objectDict = csvEntries.ToDictionary(csvEntry => csvEntry.ToMyObject().UniqueKey, csvEntry => csvEntry.ToMyObject());
Run Code Online (Sandbox Code Playgroud)
ForEach解决方案(工作):
Dictionary<string, MyObject> objectDict = new Dictionary<string, MyObject>();
foreach (CSVEntry csvEntry in csvEntries)
{
MyObject obj = csvEntry.ToMyObject();
if (objectDict.ContainsKey(obj.UniqueKey))
{
objectDict[obj.UniqueKey] = obj;
}
else {
objectDict.Add(obj.UniqueKey, …Run Code Online (Sandbox Code Playgroud) 我知道我可以使用foreach循环,如下所示:
List<int> handles = GetHandles();
foreach (int handle in handles)
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
SortedList我可以对 a执行以下操作吗?
SortedList<string, int> namesAndHandles;
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉,打错字了。它应该是一个SortedList. 本质上我想将其转换为 anIDictionary并根据名称访问句柄