田敏
返回博客列表
技术

Cast<T>的用法

田敏
2024-10-011 分钟阅读
.NETC#Backend

Cast<T>OfType<T> 是 LINQ 查询方法,用于处理集合中的数据类型转换。两者虽然看起来相似,但有显著的区别,特别是在如何处理类型不匹配时。

1. Cast<T> 的用法

Cast<T> 强制将集合中的每个元素转换为指定类型 T。如果集合中的元素无法被转换为 T 类型,则会抛出异常(InvalidCastException)。

语法

IEnumerable<T> Cast<T>();

示例

ArrayList arrayList = new ArrayList();
arrayList.Add(1);
arrayList.Add(2);
arrayList.Add(3);

// 使用 Cast<int> 强制将 ArrayList 中的元素转换为 int
IEnumerable<int> castResult = arrayList.Cast<int>();

foreach (var item in castResult)
{
    Console.WriteLine(item);  // 输出 1, 2, 3
}

注意事项

  • 如果集合中包含无法转换的类型,Cast<T> 将抛出 InvalidCastException
arrayList.Add("string");

var castResult = arrayList.Cast<int>();  // 运行时会抛出 InvalidCastException

2. OfType<T> 的用法

OfType<T> 筛选集合中属于指定类型 T 的元素,并返回它们。与 Cast<T> 不同,OfType<T> 不会尝试强制转换类型,而是仅返回符合类型 T 的元素,不符合类型的元素会被过滤掉。

语法

IEnumerable<T> OfType<T>();

示例

ArrayList arrayList = new ArrayList();
arrayList.Add(1);
arrayList.Add("string");
arrayList.Add(3);

// 使用 OfType<int> 只返回类型为 int 的元素
IEnumerable<int> ofTypeResult = arrayList.OfType<int>();

foreach (var item in ofTypeResult)
{
    Console.WriteLine(item);  // 输出 1, 3
}

注意事项

  • OfType<T> 只返回能成功转换为类型 T 的元素,其他类型的元素会被过滤掉。

总结

  • Cast<T>:强制转换集合中的每个元素到指定类型 T,如果遇到类型不匹配会抛出异常。
  • OfType<T>:只返回集合中属于指定类型 T 的元素,忽略不匹配的元素。

选择使用场景

  • 如果确定集合中所有元素都是相同类型,使用 Cast<T>
  • 如果集合中可能包含不同类型且只需要特定类型的元素,使用 OfType<T>
版权协议:MIT返回列表