【发布时间】:2020-05-25 06:11:12
【问题描述】:
我有向列表添加元素的方法 这是代码
public static List<InputDevice> GetAudioInputDevices()
{
var inputs = new List<InputDevice>();
var enumerator = new MMDeviceEnumerator();
var devicesAudio = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.All);
foreach (var device in devicesAudio)
{
inputs.Add(new InputDevice()
{
Name = device.FriendlyName,
Status = device.State.ToString(),
DeviceId = device.ID,
Identifier = device.FriendlyName.Replace(" ", "").ToUpper()
});
}
return inputs;
}
但有时我可以在 Identifier 中有重复项
如何在返回时返回列表而不重复?
【问题讨论】:
-
返回输入.DistinctBy(x => x.Identifier ).ToList();
-
什么是
DistinctBy?我猜收藏只有Distinct@JimmyN -
抱歉,我忘记了,DistincyBy 是通过github.com/morelinq/MoreLINQ 提供的。或者你可以这样做:inputs.GroupBy(x => x.Identifier).Select(g => g.First()).ToList();
-
重复的标识符是否可能具有不同的状态(活动/不存在/未插入)?如果您只需要 Active 的,您可以更改“var devicesAudio = enumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active);”中的第二个参数只返回状态等于 DeviceState.Active 的设备
-
您要求
Identifier是关键字段吗?你这里提到的duplicate Identifier,那么此时Name等字段都一样吗?这与devicesAudio获取的数据有关。如果出现相同的 Identifier,您要选择显示哪些数据?也许你应该详细描述一下。
标签: c# asp.net .net asp.net-core