0
public class SomeClass
{


    public SqlParameterCollection SPPC;

    public SomeClass(someType somePrameter)
    {

      ....... SqlParameters assignmet with someParameter goes here .......
        ...                                                              ...
      .......                                                      .......


      foreach (var item in typeof(
                                         GetTimesWithCustomerNames
                                   ).GetMembers()

                )
                {
                    SPPC.Add(item);
                }
     }


        SqlParameter Userid = new SqlParameter();
        SqlParameter Month = new SqlParameter();
        SqlParameter Year = new SqlParameter();
        SqlParameter ReasonId = new SqlParameter();
}

对于初学者来说,我在这里是因为我被困在我需要访问sqlParameters在这个类的主体中声明的地方,

这些旨在在构造函数分配后立即添加到集合中

但是当我(希望在你的帮助下......)解决这个问题时,

我想学习一种我会坚持并且可能会使用的技术,不仅可以用于当前课程中的此代码,因为我将能够重用该方法,它应该适用于大多数collection. 这意味着我可以系统地添加 - 成员/变量或不同类型的数据,而不是隐式/手动放置每个数据,就像我也可以处理与本示例中不在同一范围内的其他类成员/字段或属性一样,它使它更实用。

我的问题是

你将如何实现这一点,使用 foreach 有点过时了,因为我们可以在 Linq 上使用 lambda 表达式?

是否有其他更便宜的方式来达到children不使用反射的给定类?

我将非常感谢一个实施示例

4

1 回答 1

1

我个人会做这样的事情,

public class SomeClass
{
    public List<SqlParameter> SPPC;

    public SomeClass(someType someParameter)
    {
        SPPC = this.GetType().GetMembers().ToList();

        // Or you could restrict it to only fields or properties using Where()
        SPPC = this.GetType().GetMembers().Where(member => member which is of type such).ToList();

        // Or use Select() to get only the value or the name of the members
        SPPC = this.GetType().GetMembers().Select(member => get member value).ToList();

    }
}

你只需要考虑你需要从这些成员那里得到什么,因为使用反射有时会让人很困惑。

没有反射

现在,如果您不想使用反射,则需要在初始化它们时手动添加它们,因此,

public class SomeClass
{
    public List<SqlParameter> SPPC;

    public SomeClass(someType someParameter)
    {
        SPPC.Add(new SqlParameter());
        SPPC.Add(new SqlParameter());
        SPPC.Add(new SqlParameter());
        ...
    }
}
于 2012-12-10T03:33:39.443 回答