忽略不相关的部分 - 我要求使用没有参数且没有返回值的委托,但要从中获取值。 目前的解决方案是使用lambda表达式和在它之前声明的变量。
string result;
RequiredMethod(() => { result = "the result"; });// Gets the result from a 2nd thread.
//use result
有没有办法在不使用lambda表达式的情况下执行此操作?我希望应该有,但不能想出来。
答案 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";});
}