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です。つまり、この例と同じスコープにない他のクラスのメンバー/フィールドまたはプロパティでも実行できるように、暗黙的/手動でそれぞれを配置する代わりに、メンバー/変数またはさまざまなタイプのデータを体系的に追加できます。さらに実用的です。

私の質問は

これをどのように実装しますか?Linqでラムダ式を使用できるため、foreachの使用はやや時代遅れになっていますか?

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();

    }
}

Reflectionを使用するとかなり混乱することがあるため、これらのメンバーから取得する必要があるものに頭を悩ませる必要があります。

反射なし

ここで、Reflectionを使用したくない場合は、初期化するときに手動でそれぞれを追加する必要があります。

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 に答える