提案したとのリストまたは統計調査員の引継ぎをする場合は、から汎用の授業
質問
私の答えはできないのに使用カップルでのん稿cludges.私だけを見ても優雅な応答となります。
抽象クラス:
public interface IOtherObjects;
public abstract class MyObjects<T> where T : IOtherObjects
{
...
public List<T> ToList()
{
...
}
}
お子様:
public class MyObjectsA : MyObjects<OtherObjectA> //(where OtherObjectA implements IOtherObjects)
{
}
public class MyObjectsB : MyObjects<OtherObjectB> //(where OtherObjectB implements IOtherObjects)
{
}
引っ張り出すだけではなく、これループを通じて収集MyObjects(またはそれに準ずるグループ、一般にその他その活用を ToList の方法 MyObjects 基底クラスとしていて具体的には知らのタイププリケーションに合うかどうか。
編集 どの具体例としては、こち、私について考えたことを発表が行いに異なるものではなく、現在行が存在しない。そのうち、かなり頻繁に会えると思ってたfloatです。
編集 @Saraませんので、特定のコレクションの型かつに、リスト、もののToList法の各インスタンスは比較的使用不可能な匿名タイプ)
@アクtrue、この問題は相対的に想定していき、作業のリストの物から、みそベースタイプ非常に便利です。このToList還元の一覧BaseTypeての私の回避策
編集 することができます。:これまで、このような討論が期待したもので主とを確認したが疑われます。にあります。ることがあるのか"という誰でも気軽に入力します。
編集@Robあードを動作させることができ定義された型でない場合のみとして知られるリストのIOtherObjects.
@Rob 再 感謝。これが通常私cludgy回避策(身を包ん:)).のいずれかとのConvertAll機能のぼりを通じて、限ります。んかを理解する問題です。
予選の編集 合って少し混乱
具体的には、(Iがせめて自分の最新の実装すくするには複雑すぎる):
でも私は2つのオブジェクト型、B、Cの継承からオブジェクトA
多くのシナリオを発表して自分がリストからのダイヤルボタンのリストC、またはその他の場合のリストのいずれかから出ない人も結構多いのものかわからない、というていただく場合で基底クラスって必要な、特定のリストA
上記の例は、たぬの例 リストの特定 問題の最新の受肉です。
通常ではその思いを通じてシナリオを制限の量のコードと書きるようになることは、もう少し優雅なります。ずっと議論の可能性とその他の点では、私は以ます。私は驚きの一言ConvertAll()これまでとは別の回避策に利用していけど、少しでもデフォルト値が設定されたシナリオを手に
@Rob またしても やサラ
りがいを感じいジェネリック医薬品において静contexted栄光をつかったのを理解する問題です。
実際のデザインのシステムおよび使用のジェネリック医薬品(とこなみにタッチのバイアスした唯一のプレーヤーのデザイン)が行われます。ではで仕事をしている時のコアAPIしい状況をしている時に誤った範囲に何かやるっていう言をいただくこともできましたがって少し少な優雅さん(うどちらかできなものぐさ-いもののラベル).
私distaste用いるとは言いcludgeは大いに必要なループを通じて記録セットだけを変換するオブジェクトベースの値がっていただきます。
いったい誰がこのをその符号化前に、だれていたcleverer、少なくともより優雅なように扱っています。
解決
の場合
class B : A
class C : A
とい
List<B> listB;
List<C> listC;
を希望される処理リストとして親会社のタイプ
そのものを使用できる
List<A> listA = listB.Cast<A>().Concat(listC.Cast<A>()).ToList()
他のヒント
なぜ集MyObjects?ある特定の理由のいらっしゃらないです。
お場合MyObjectsAとMyObjectsBない共通の前身です。一般クラスは、テンプレート 異なる 授業のない共通の基底クラスです。したい場合において共通性の異なるクラスの使用インタフェースできないコ ToList ループの原因で異なる署名の異なる。を作成できますToListを返す オブジェ より特定のタイプです。
きょうのアクセスのToList()メソッドが、ご不明な点がございましたらおのタイプなのこ。
foreach(var myObject in myObjectsList)
foreach(var obj in myObject.ToList())
//do something
もちろんこれだけの作業C#3.0です。
そのvarは単に削除の要件などのタイプのリストに含めるに対して率直に言っているとコートが剥がvarを入力ダイナミックに変化します。
OK、私に戸惑い、以下のコード動作において好奇心のより良い!):
// Original Code Snipped for Brevity - See Edit History if Req'd
い逃したの?
以下の対応からOP
OK今思ったよりずっと混乱して..何を言っていることがしたいの一覧を取得し 入力 値から汎用/抄録です。の授業となっていう).
はできませんを返しのキリストの場合は子どもたはインタフェースを実装する場合-なりました。もちろんの一覧を取得しますが、特定のタイプの抽象一覧はこのように:
public List<OfType> TypedList<OfType>() where OfType : IOtherObjects
{
List<OfType> rtn = new List<OfType>();
foreach (IOtherObjects o in _objects)
{
Type objType = o.GetType();
Type reqType = typeof(OfType);
if (objType == reqType)
rtn.Add((OfType)o);
}
return rtn;
}
ていただく場合も点がここにありがとうございます。rewordか?!(わないと思うように私に一つだけの美しく雄大なぢ大自然に包んだ走ります。私の確立を目指している場合は誤解ジェネリック医薬品のメリット。
他の更新:D
右しているので、以下のようになりたい/が必要なオプションのキリストのベースリストはい?
このようお抽象クラスを見てこのように使用可能ToListのコンクリートタイプ、またはToBaseList()リストを取得インタフェースのタイプです。本作のシナリオです。なすか?
public abstract class MyObjects<T> where T : IOtherObjects
{
List<T> _objects = new List<T>();
public List<T> ToList()
{
return _objects;
}
public List<IOtherObjects> ToBaseList()
{
List<IOtherObjects> rtn = new List<IOtherObjects>();
foreach (IOtherObjects o in _objects)
{
rtn.Add(o);
}
return rtn;
}
}
更新#3
のではない"cludgy"回避策(身を包んだ取り)-私はだけで..と思い、大きな課題ここではデザイン/grok問題です。すごく問題なかったこのコードを解決します。だめなようなもの:
public abstract class MyObjects<T> where T : IOtherObjects
{
List<T> _objects = new List<T>();
public List<IOtherObjects> Objects
{ get { return _objects; } }
}
#warning This won't compile, its for demo's sake.
ことができるピープル出てくるので、どうか え だしていきたいと思います。思い思いのジェネリック医薬品のメリットは、取得しようとしてい設計にはなっていないので!?
そして、近年は見つかりに
List<A>.Cast<B>().ToList<B>()
パターンです。
なってしまう、
ジェネリック医薬品の使用のための静時の型チェック ない ランタイムを派遣。利用相続/インタフェースを実行時の派遣、ジェネリック医薬品使用のためのコンパイル時の型保証
interface IMyObjects : IEnumerable<IOtherObjects> {}
abstract class MyObjects<T> : IMyObjects where T : IOtherObjects {}
IEnumerable<IMyObjects> objs = ...;
foreach (IMyObjects mo in objs) {
foreach (IOtherObjects oo in mo) {
Console.WriteLine(oo);
}
}
(あります。Enumerables上のリストが表示されます。)
または での使用は適切な動的に英語という言葉VB.:-)