如何模拟返回值

时间:2015-12-01 11:52:39

标签: c# .net

忽略不相关的部分 - 我要求使用没有参数且没有返回值的委托,但要从中获取值。 目前的解决方案是使用lambda表达式和在它之前声明的变量。

string result;
RequiredMethod(() => { result = "the result"; });// Gets the result from a 2nd thread.
//use result

有没有办法在不使用lambda表达式的情况下执行此操作?我希望应该有,但不能想出来。

2 个答案:

答案 0 :(得分:3)

是的当然有:

public class ValueHolder
{
    public string Value { get; private set; }

    public void AssignValue()
    {
        this.Value = "the result";
    }
}

// usage
var vh = new ValueHolder();
RequiredMethod(vh.AssignValue);

// access value
vh.Value

您提供的代码告诉我您尝试从另一个线程访问值。请注意,在调用vh.Value之前,您不应该访问AssignValue。您需要添加一些其他代码来同步这些操作(但您的lambda具有完全相同的问题)。

答案 1 :(得分:0)

还有一个问题是为什么你必须使用委托。如果它是关于获得价值,你甚至可以用这样的方式实现它

string someString;
RequiredMethod(ref someString);

当然这会改变RequiredMethod的签名(问题就变成了为什么你不能首先返回一个值。)。

您甚至可以使用lamdba表达式编写第二个重载。

void RequireMethod(string ref variable) { 
     RequireMethod(() => { variable = "the result";});
}