应该很容易......如何检查类型是IEnumerable <BaseType>?
class Base{}
class Foo:Base{}
public bool Bar(Type t){
// return ???
// NB: shouldn't know anything about Foo, just Base
}
Assert.True(Bar(typeof(IEnumerable<Foo>));
Assert.False(Bar(typeof(IEnumerable<Base>));
Assert.False(Bar(typeof(string));
Assert.False(Bar(typeof(Foo));
只是回答问题:为什么:第二个应该是假的(实际上 - 它并不重要,引起酒吧争论永远不会IEnumerable<Base>
)。
我想写FluentNhibernate自动映射约定映射我的类枚举整数。我已经成功地做到了这一点,但是当我想要映射IEnumerable<EnumerationChild>
(在我的情况下 - User.Roles)时,事情就不复存在了。
public class EnumerationConvention:IUserTypeConvention{
private static readonly Type OpenType=typeof(EnumerationType<>);
public void Apply(IPropertyInstance instance){
//this is borked atm, must implement ienumerable case
var closedType=OpenType.MakeGenericType(instance.Property.PropertyType);
instance.CustomType(closedType);
}
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria){
criteria.Expect(
x=>typeof(Enumeration).IsAssignableFrom(x.Property.PropertyType) ||
typeof(IEnumerable<Enumeration>)
.IsAssignableFrom(x.Property.PropertyType));
}
}
你真的不能想出比'Bar'更好的名字吗? – Timwi 2010-09-26 15:04:57
@Timwi巴兹呢? – 2010-09-26 15:08:31
@Arnis:你见过几个有这样的函数名的代码段?你能否诚实地想到一个描述函数*的名字? – Timwi 2010-09-26 15:11:33