【发布时间】:2021-04-07 22:31:49
【问题描述】:
我正在尝试使用“as”关键字进行测试,但即使我尝试测试的变量是一个集合,也会得到 null。
DoSomething(() => someMethodReturningCollection());
DoSomething(() => anotherMethodReturningAnObject());
public void DoSomething(Func<T> aFunc)
{
var result = aFunc();
var test = result as List<T>;
if(test != null){
DoTaskA();
return;
}
//Here `result` is not a collection
DoTaskB();
}
test 始终为空。 typeof(T) 显示为 IEnumerable<T> 否则。
我不认为这是一个重复的问题
我正在尝试使用“as”运算符来测试一个类型是否是一个集合。问题似乎是List<T> 诉List<string> 或List<customer>。我可以成功测试result as List<customer>,但不能成功测试result as List<T>。 as 运算符似乎需要一个显式类型 - 而不是 T。
【问题讨论】:
-
嗯,什么样的收藏? result.GetType() 说什么
-
“否则 typeof(T) 显示为 IEnumerable” --
IEnumerable<T>与List<T>完全不同。如果as返回null,则说明对象不是您要求的目标类型。 就这么简单。有关两者之间区别的详细信息,请参阅副本。 -
来自其他 cmets:“aFunc 可以返回一个集合或单个对象。”。
test是干什么用的? -
@tymtam:原来的问题是重复的。将实际问题更改为不同的东西是不合法的,特别是如果您首先不是问题的实际作者。如果您想回答不同的问题,请继续发布该问题并将您的答案放在那里。不要编辑现有问题以使其与众不同。