DOTNET核心之前,我們能夠做如何通過反射匹配名稱和參數類型來獲得受保護的方法?
var member = type.GetMethod(name, bindingFlags, null, argtypes, null);
要訪問的方法匹配它的名稱和參數類型,在dotnet的核心,他們移除了這個過載,現在我只能通過name && binding flags
OR name && parameters type
(see)獲得,但不像以前那樣。
有一種新方法GetRuntimeMethods它返回IEnumerable<MethodInfo>
幷包括非公開的方法,但我不能按參數類型過濾。
還有另一種方法GetRuntimeMethod,我可以通過參數類型進行過濾,但它不包含非公共方法。
我已經嘗試過這樣的事情,但未能
var member = type.GetRuntimeMethods().Where(m =>
m.Name == name && (m.GetParameters().Select(p => p.GetType()).ToArray() == argtypes)).FirstOrDefault();
有沒有辦法讓通過其名稱和參數類型的方法?
我不認爲你可以比較像數組:'m.GetParameters()選擇(P => p.GetType() ).ToArray()== argtypes)' - 它不會比較數組項,而是數組引用,所以它總是假的。你可以使用'Zip'或'SequenceEqual'來比較數組的內容。 – Pawel