Dar*_*bio 1 c# generics interface
如果我有一个看起来像这样的物体:
class Person : IProxy
{
// Properties
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法返回一个object实际上是List<Person>:
object GetList()
{
List<Person> people = new List<Person>();
person.Add(new Person());
person.Add(new Person());
return people;
}
Run Code Online (Sandbox Code Playgroud)
为什么以下代码导致null?
var obj = GetList() as List<IProxy>;
Run Code Online (Sandbox Code Playgroud)
但是下面的代码返回一个List:
var obj = GetList() as List<Person>;
Run Code Online (Sandbox Code Playgroud)
在Visual Studio的Watch面板中,我的类型报告为:
object {System.Collections.Generic.List<Person>}
Run Code Online (Sandbox Code Playgroud)
A List<Person>和List<IProxy>是两种不同的类型,因此将一个转换为另一个可能会产生null.
GetList().OfType<IProxy>()
Run Code Online (Sandbox Code Playgroud)
会做你想做的.你也可以使用
GetList().Cast<IProxy>()
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢OfType,因为当集合包含异构类型时它不会抛出异常
协方差和反差异常见问题可能会回答您的更多问题.
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |