應該很容易......如何檢查類型是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