0
這裏的情況: 我試圖讓我的組件實現與使用泛型類型參數沿特定的通用接口的所有類型的集合。我已經成功地將一個Linq查詢放在一起來執行此操作,但它似乎非常冗餘。選擇使用LINQ和反射元
我開始,讓閱讀並加入卻不見如何我會用它們來減少這種特定查詢的詳細程度。任何人都可以提供關於如何縮短/增強查詢的任何提示嗎?
下面是目前通過和MSTest的類演示了我想要實現:
[TestClass]
public class Sample
{
[TestMethod]
public void MyTest()
{
var results =
(from type in Assembly.GetExecutingAssembly().GetTypes()
where type.GetInterfaces().Any(x =>
x.IsGenericType &&
x.GetGenericTypeDefinition() == typeof(MyInterface<,>)
)
select new ResultObj(type,
type.GetInterfaces().First(x =>
x.IsGenericType &&
x.GetGenericTypeDefinition() == typeof(MyInterface<,>)
).GetGenericArguments()[0],
type.GetInterfaces().First(x =>
x.IsGenericType &&
x.GetGenericTypeDefinition() == typeof(MyInterface<,>)
).GetGenericArguments()[1]
)).ToList();
Assert.AreEqual(1, results.Count);
Assert.AreEqual(typeof(int), results[0].ArgA);
Assert.AreEqual(typeof(string), results[0].ArgB);
}
interface MyInterface<Ta, Tb>
{ }
class MyClassA : MyInterface<int, string>
{ }
class ResultObj
{
public Type Type { get; set; }
public Type ArgA { get; set; }
public Type ArgB { get; set; }
public ResultObj(Type type, Type argA, Type argB)
{
Type = type;
ArgA = argA;
ArgB = argB;
}
}
}
問候,
馬特
托馬斯,你是一個藝術家,這個完美的作品,謝謝。 我原來的例子並不支持這一點,但我想知道是否有可能選擇一種類型多次,如果它有不同的類型參數實現的接口不止一次。在這種情況下會使用連接嗎? – Matt 2010-06-27 09:21:08
啊,我得到的這個LINQ的東西的竅門現在,我管理的到位,使用「從」聲明第二的「讓IFC = ...」 – Matt 2010-06-27 09:38:23