3
.NET 4.0(或更早版本)反射API是否有任何方法來解析泛型類型參數?查看我當前嘗試的ArgumentException註釋之後的兩行。解決泛型類型參數的元數據令牌
[TestMethod]
public void TestGenericParameterTokenResolution()
{
Type genericParameter = typeof(List<>).GetGenericArguments()[0];
Assert.IsTrue(genericParameter.IsGenericParameter);
int metadataToken = genericParameter.MetadataToken;
// make sure the metadata token is a GenericParam
Assert.AreEqual(metadataToken & 0xFF000000, 0x2A000000);
Module module = typeof(List<>).Module;
// the following both throw an ArgumentException.
Type resolvedParameter = module.ResolveType(metadataToken);
resolvedParameter = (Type)module.ResolveMember(metadataToken);
Assert.AreSame(genericParameter, resolvedParameter);
}
這是用於別的東西。我目前沒有使用C#代碼的例子 - 這可能不是你想象的那樣。 'typeof(List)!= typeof(List <>)。Module.Resolve(typeof(List <>)。MetadataToken,new Type {typeof(int)},null)' –
2009-08-08 20:15:14
' KeyedCollection'是'Collection '的TypeSpec元數據標記,其中'TItem'返回到'KeyedCollection'的相應通用參數。爲了解決這個TypeSpec,你需要將'typeof(KeyedCollection <,>).GetGenericArguments()'傳遞給'ResolveType'。然而,我知道在C#中沒有辦法讓TypeSpec令牌向你展示這個動作。 –
2009-08-08 20:27:34
是啊,我明白了..我想我在某處讀了反射對元數據無法做到的事情列表,我認爲這屬於這個列表。聽起來很有趣。你有沒有看過元數據非託管API? – 2009-08-08 21:11:09