我怎样才能得到"来电表达"传递给方法的参数,而不是C#中的值?

时间:2015-05-31 18:44:33

标签: c#

例如:

using System.Collections.Generic;

public static void MyMethod( Dictionary<dynamic, dynamic> table /* ... more args ... */ )
{
    // Inside this method body, I want to get the caller expression (that is GetDynamicDictionaryValue() in this case), not the value of 'table' parameter.
}

在另一个文件中,我调用上面的方法(MyMethod):

using System.Collections.Generic;

public static Dictionary<dynamic, dynamic> GetDynamicDictionaryValue()
{
    // This returns dynamic dictionary...
}

public static void Main( string[] args )
{
    // This is the caller to MyMethod.
    MyMethod( table: GetDynamicDictionaryValue() /* ... */ );
}

(我在上面写了示例代码而没有测试它。如果有任何错误,我会修复它们。)

1 个答案:

答案 0 :(得分:1)

你不能通过值传递C#中的参数,并且方法无法知道如何计算特定参数。

您可以改为传递计算参数或Expression的函数来自己构建它(类似于LINQ-to-SQL)。

示例显示如何传递函数:

public static void MyMethod( Func<Dictionary<dynamic, dynamic>> tableArgCreator,
 /* ... more args ... */ )
{
    var table = tableArgCreator();
    ...
}

MyMethod( table: GetDynamicDictionaryValue, /* ... */ );