如何在C#中使用Linq查找与IEnuemerable值的特定值匹配的索引?

时间:2019-07-17 14:01:30

标签: linq ienumerable selectedindex

基本上,我用WPF C#编写了用于串行端口的小型应用程序。

对于从ComPortComboBox中选择特定端口号的串行端口的初始设置,它应显示已选择的特定端口的正确端口设置(例如:BaudRate)。

因此,我决定在端口号更改时分配BaudRateComboBox的SelectedIndex。

因此,我试图读取所选端口的波特率,然后将波特率值与BaudRateComboBox中定义的值匹配,以使用C#的Linq查询来定位正确的索引。我知道我们有foreach方法来定位索引,但是我想学习并在C#中使用Linq作为解决方案。

请参阅代码以进一步了解。我需要在ComPort_SelectionChanged方法中添加Linq来找到与条件匹配的索引。

namespace SerialReadAndWrite
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private SerialPort m_port = new SerialPort();
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ComPort_DropDownOpened(object sender, EventArgs e)
        {
            var ports = SerialPort.GetPortNames();
            ComPortComboBox.ItemsSource = ports;
        }

        private void ComPort_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            m_port.PortName = ComPortComboBox.SelectedItem.ToString();
            //BaudRateComboBox.SelectedIndex= choose the index from BaudRateComboBox.ItemSource which matches the value of the existing settings of the port
            BaudRateComboBox.IsEnabled = true;
        }

        private void BaudRate_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            m_port.BaudRate = Convert.ToInt32(BaudRateComboBox.SelectedItem.ToString());         
        }

    }
}

1 个答案:

答案 0 :(得分:0)

请注意,根据BaudRateComboBox.ItemSource的实际类型,请确保LINQ是最佳选择,但是您可以使用Select的两个参数来查找匹配项:

BaudRateComboBox.SelectedIndex = BaudRateComboBox.ItemSource.Select((br,n) => new { br, n }).First(brn => brn.br == m_port.BaudRate).n;

我假设您的ItemSourceInt32的集合以匹配BaudRate,如果不匹配,请添加适当的转化。