检查对象列表中的对象类型

问题描述 投票:0回答:5

获得一个带有 StackPanel 的 WPF 表单,其中包含带有 StackPanel 的扩展器。

<Expander Name="eSoftware" Header="5 Software">
    <StackPanel Name="StSoftware" Orientation="Horizontal" HorizontalAlignment="Left"  Margin="0,0,8,0">
        <StackPanel Margin="0,10" Width="29">
            <Image x:Name="img" Height="26" Source="Images/3453120.png" Stretch="Fill" Margin="0,0,0,0"/>
        </StackPanel>
        <StackPanel  Margin="0,10">
            <Label  x:Name="lbl" Content="Label"  Margin="0,0,0,0" />
        </StackPanel>
    </StackPanel>
</Expander>

我在对象列表中读取了扩展器的内容。 现在我必须知道列表是否包含 stackpanel 类型的对象。

List<Object> tmpList = new List<Object>();
tmpList = ReadChild((StackPanel)exp.Content)  //gives out the content of an expander. In the Upper case it is 2 StackPanels

if(tmpList.Contains.typeof(StackPanel)=true) //that's wrong
{
  //search for the Stackpanel with lables in it
}
c# wpf list types
5个回答
3
投票

您可以使用

OfType<>
来过滤列表中的特定类型。我知道您想要循环遍历所有 StackPanel(在列表中),因此您可以执行以下操作:

foreach(var panel in tmpList.OfType<StackPanel>()){
    //your work here ...
}

如果你想检查是否有StackPanel,那么使用这个:

if(tmpList.OfType<StackPanel>().Any()){
    //...
}

0
投票

如果我理解正确,你可以使用这个 LINQ 表达式

var w = tmpList.Where(x=>x.IsTypeOf(StackPanel)).SingleOrDefault();

0
投票

我会做这样的事情:使用

Enumerable.OfType<>()

更多信息:https://msdn.microsoft.com/en-us/library/vstudio/bb360913(v=vs.100).aspx

foreach(var stackpanel in tmpList.OfType<StackPanel>())
{
    // search for the label. (the same trick)
    var myLabel = stackpanel.Children.OfType<Label>().FirstOrDefault();

    // if the label can't be found, continue to the next one.
    if(myLabel == null)
        continue;

    myLabel.Content = "whatever";
}

0
投票

没有多少问题可以回答这部分问题。 “现在我必须知道列表是否包含 stackpanel 类型的对象。” 可以通过以下方式实现:

if (tmpList.Any(x=>x.IsTypeOf(StackPanel)))
{
     //returns true if there are any stack panels in the list 
}

0
投票

public int ExecuteDMLStatements(字符串查询,字符串连接,列表参数名称,列表参数值) { 整数计数=0; 尝试 { if (paramNames.Count == paramValues.Count) { SqlConnection conn = GetSqlConnecton(连接); 使用 (SqlCommand cmd = new SqlCommand(query, conn)) { 对于 (int i = 0; i < paramValues.Count; i++) { Type valueType = paramValues[i].GetType(); switch (valueType.Name) { case "Int32": cmd.Parameters.AddWithValue(paramNames[i], Convert.ToInt32(paramValues[i])); break; case "Double": cmd.Parameters.AddWithValue(paramNames[i], Convert.ToDouble(paramValues[i])); break; case "DateTime": cmd.Parameters.AddWithValue(paramNames[i], Convert.ToDateTime(paramValues[i])); break; case "Single": cmd.Parameters.AddWithValue(paramNames[i], Convert.ToString(paramValues[i])); break; default: cmd.Parameters.AddWithValue(paramNames[i], Convert.ToString(paramValues[i])); break; } } count = cmd.ExecuteNonQuery(); } } return count; } catch (Exception ex) { throw new Exception("Issue in ExecuteDMLStatements method.", ex); } }

© www.soinside.com 2019 - 2024. All rights reserved.