将泛型类型参数强制转换为数组
本文关键字:数组 转换 泛型类型参数 | 更新日期: 2023-09-27 18:06:24
如果我知道某个泛型类型参数是一个数组,我如何将其转换为数组或IEnumerable
,以便我可以看到它的项?例如。
public class Foo<T>
{
public T Value { get; set; }
public void Print()
{
if (Value.GetType().IsArray)
foreach (var item in Value /*How do I cast this to Array or IEnumerable*/)
Console.WriteLine(item);
}
}
试试这样:
public void Print()
{
var array = Value as Array;
if (array != null)
foreach (var item in array)
Console.WriteLine(item);
}
关键字:
as操作符类似于强制转换操作。但是,如果转换不可能,因为返回null而不是引发异常。
或者你可以约束你的类型参数
public class Foo<T> where T : IEnumerable
{
public T Value { get; set; }
public void Print()
{
foreach (var item in Value)
Console.WriteLine(item);
}
}
Try
foreach (var item in (object []) Value)
但是,由于您只能使用可以枚举Value
的事实,因此您可能更喜欢
var e = Value as IEnumerable;
if (e == null) return;
foreach (var item in e) Console.WriteLine (item);
这改进了封装,并且当您从数组切换到列表时无需更改代码。