私はこのトピックについていくつかの情報を見つけましたが、それはすべて典型的なクラスに関するものでした。私は下のクラスを汎用バージョンに変換する方法がわかりません。一般的に型付けされたHashSet
SqlHashSetクラスを使用してデータベースにパラメータの整数値を設定する既存のコードを継承しました。これは次のようになります。
namespace Services
{
public class SqlHashSet : HashSet<int>, IEnumerable<SqlDataRecord>
{
SqlDataRecord ret = new SqlDataRecord(new SqlMetaData("value", SqlDbType.Int));
foreach (var data in this)
{
ret.SetValue(0, data);
yield return ret;
}
}
}
コードの構造上、SqlHashSetを使用する必要があります。私の問題は、の文字列のSqlHashSetが必要であるということです。
私はクラス宣言でHashSet<T>
を使用することができるかもしれないと思っていますが、その後、私はまた、値の型がSqlDbType.intのですかSqlDbType.VarChar
だから、私の質問があるかどうかを確認する必要があります。
これを行うことはできますか?
<T>
を使用するには何が必要ですか?多分、3番目の質問はありません。多分私はそれがジェネリック型で動作し、値を設定するSqlDbTypeを決定する方法を理解したら、コードをステップ実行することができます。
'これはできますか?' <=いいえ、ここに表示されているコードはコンパイルされません。結果を「収穫」する「foreach」ループは、メソッド本体の一部でなければならず、クラス本体内に単独で存在することはできません。 – Igor
'を使うには何が必要なのですか?<=多分もっと良い質問は、変更に価値があるでしょうか?限られた数のプリミティブSQL型があり、SqlTypeは正確に1 .netプリミティブ型にアライメントする必要はありません。通常、リレーションシップはモデル構造によって異なります。例:.net DateTimeはDate、DateTime、またはDateTime2にマップできます。これはジェネリックを使用するのに最適な場所ではないかもしれません。 –
Igor
「HashSet」と「SqlDbType」の2つの一般的なパラメータがあります。あなたのクラスは 'SqlHashSet'のようになります。あるいは、この 'SqlHashSet'を使用しないようにコードを書き直し、ライブラリの型に固執してください。 –