1 #Region "Microsoft.VisualBasic::c9a6466a8eaf2d44b4f5496927966f2d, Microsoft.VisualBasic.Core\Extensions\Reflection\Parameters\Simple.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Module ParamLogUtility
35     
36     '         Function: AcquireOrder
37     
38     
39     ' /********************************************************************************/
40
41 #End Region
42
43 Imports System.Reflection
44 Imports Microsoft.VisualBasic.ComponentModel.Collection
45 Imports Microsoft.VisualBasic.ComponentModel.DataSourceModel
46 Imports Microsoft.VisualBasic.Language
47
48 Namespace Emit.Parameters
49
50     Partial Module ParamLogUtility
51
52         ''' <summary>
53         ''' 这个方法要求传递进来的参数的顺序要和原函数的参数的顺序一致,故而不太推荐使用这个方法
54         ''' </summary>
55         ''' <param name="parameters"></param>
56         Public Function AcquireOrder(ParamArray parameters As Object()) As Dictionary(Of Value)
57             Dim invoke As MethodBase = New StackTrace().GetFrame(1).GetMethod()
58             Dim trace As New NamedValue(Of MethodBase) With {
59                 .Name = invoke.Name,
60                 .Value = invoke
61             }
62             Dim methodParameters = invoke.GetParameters()
63             Dim out As New Dictionary(Of Value)
64
65             For Each aMethodParameter As ParameterInfo In methodParameters
66                 Dim value As Object =
67                     parameters(aMethodParameter.Position)
68                 out += New Value With {
69                     .Name = aMethodParameter.Name,
70                     .Trace = trace,
71                     .Type = aMethodParameter.ParameterType,
72                     .Value = value
73                 }
74             Next
75
76             Return out
77         End Function
78     End Module
79 End Namespace