我有這樣的結構域:C#思考:如何使用 「對象」 作爲 「類型參數」
public class GenClass<T> { }
public class Type1 { }
public class Type2 { }
public class GenType1 : GenClass<Type1> { }
public class GenType2 : GenClass<Type1> { }
public class GenType3 : GenClass<Type2> { }
public class GenType4 : GenClass<string> { }
public class GenType5 : GenClass<int> { }
和這個邏輯:
public class SomeClass {
public void Add<T>(GenClass<T> t) { }
}
和這種消費:
public class Consumer {
public void Method() {
var some = new SomeClass();
some.Add(new GenType1());
some.Add(new GenType2());
some.Add(new GenType3());
some.Add(new GenType4());
some.Add(new GenType5());
}
}
但不是單獨添加每個GenType(n)
,而是創建一個像這樣的方法:
public void AddFromAssembly<TAssembly>(SomeClass some, Type baseType) {
var list = typeof(TAssembly).Assembly.GetTypes()
.Where(t => baseType.IsAssignableFrom(t)
&& !baseType.Equals(t))
.ToList();
list.ForEach(type => {
var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null,
Type.EmptyTypes, null);
var obj = ctor.Invoke(new object[] { });
some.Add(obj); //????
});
}
,並希望這樣稱呼它:
public class Consumer {
public void Method() {
var some = new SomeClass();
AddFromAssembly<GenType1>(some, typeof(GenClass<>));
}
}
但some.Add
方法是一種通用的方法和ctor.Invoke
方法返回一個object
。 你有什麼想法來解決這個問題嗎?提前致謝。
UPDATE問題不完整,我解決了。感謝您的審查。
「obj」的「類型」應該是什麼? (雖然不是一個聰明的答案,但我經常有一個'void X(object x,Type t)',它從'void X(T t){X(t,typeof(T));}' ) –
2012-05-03 18:07:41
問題不完整,我解決了。感謝您的審查。 –