もう一度申し訳ありません。私はここ数時間、関連するトピックを読んできましたが、キャスティングやジェネリックに関する問題はまだまだありません。私はまだ.net 3.5を使用することができないので、独自のHashSetクラスを作成しようとしています。C#でジェネリック型にオブジェクトをキャストできますか?
エラーは、以下のRetainAllメソッドにあります。それはうまくコンパイルされますが、実行時エラーが発生します 'タイプ' System.Collections.DictionaryEntry 'のオブジェクトをキャストして、' mycompany.UnivID 'をforeach文に入力できません。
これは、汎用オブジェクトをその実装タイプにキャストできないということですか?私はいくつかのようなものを試しました
foreach ((T) obj in set)
しかし、それらはコンパイルされません。実装したクラスのスニペットは
public sealed class UnivIDSet : ISet {
private readonly ISet<UnivID> univIDs;
public UnivIDSet() : base() {
univIDs = new HashSet<UnivID>();
}
}
ある
public sealed class HashSet<T> : ISet<T> {
private readonly Hashtable set;
public HashSet() {
this.set = new Hashtable();
}
public void RetainAll(ISet<T> c) {
lock (set) {
foreach (T obj in set) {
if (!c.Contains(obj))
this.set.Remove(obj);
}
}
}
}
し、我々は実際にセットでのオブジェクトである私たちのUnivID
クラスを持っている:
関連するコードです。
はい、それでした。ありがとう!私は今質問に少し恥ずかしいです。私は知っていたか、それを理解するべきだったはずです。 – user26270
ハハは、私たちすべてに起こります。時には別の目のペアが役立ちます。 –