方法では、私はobject
を得る。IList <>の項目数を取得する方法はオブジェクトとして得られますか?
場合によっては、object
はIList
の「something」(これは何かを制御できません)です。
私がしようとしています:
- このオブジェクトが(何かの)
IList
であることを識別 - はそれから
Count
を得ることができるように、「IList<something>
」にobject
をキャストします。今の
、私は立ち往生し、アイデアを探しています。
方法では、私はobject
を得る。IList <>の項目数を取得する方法はオブジェクトとして得られますか?
場合によっては、object
はIList
の「something」(これは何かを制御できません)です。
私がしようとしています:
IList
であることを識別Count
を得ることができるように、「IList<something>
」にobject
をキャストします。今の、私は立ち往生し、アイデアを探しています。
object
がIList
を実装しているかどうかを確認するには、is
を使用してください。
次に、あなたは、カウントを得るためにあなたのobject
IList
にキャストすることができます。
object myObject = new List<string>();
// check if myObject implements IList
if (myObject is IList)
{
int listCount = ((IList)myObject).Count;
}
ああ、これは私が逃したものです。私は 'IList 'である' IList
if (obj is ICollection)
{
var count = ((ICollection)obj).Count;
}
object o = new int[] { 1, 2, 3 };
//...
if (o is IList)
{
IList l = o as IList;
Console.WriteLine(l.Count);
}
intは、[]のIListであるので、これは、3を出力します。
あなたが望むのはカウントだけなので、IList<T>
を実装するものもIEnumerable
を実装するという事実を使うことができます。さらに任意の(一般的な)シーケンスの数を返しますSystem.Linq.Enumerable
で拡張メソッドがあります:
var ienumerable = inputObject as IEnumerable;
if (ienumerable != null)
{
var count = ienumerable.Cast<object>().Count();
}
Cast
への呼び出しがあるため箱there isn't a Count
on non-generic IEnumerable
外です。
ああ、はい、私はそれを手に入れます!しかし、私はこの実装でパフォーマンスの影響を期待する必要がありますか? – remio
@remioはい、そうです。 'Cast
*あなたが望むすべての 'Count' *ですか?もしそうなら、それを 'IList'にする必要はありません。単純な 'IEnumerable'がこれを行います。 –
AakashM
はい、「カウント」はすべて私が望むものです。しかし、私は 'Count'を' IEnumerable'で見ることができません。 – remio