C#财产代表?
在我的其他方法中,我可以做这样的事情C#财产代表?,c#,delegates,C#,Delegates,在我的其他方法中,我可以做这样的事情 public void Add(T item) { if (dispatcher.CheckAccess()) { ... } else { dispatcher.Invoke(new Action<T>(Add), item); } } 公共作废添加(T项) { if(disp
public void Add(T item)
{
if (dispatcher.CheckAccess())
{
...
}
else
{
dispatcher.Invoke(new Action<T>(Add), item);
}
}
公共作废添加(T项)
{
if(dispatcher.CheckAccess())
{
...
}
其他的
{
调用(新操作(添加),项);
}
}
但是在这种情况下,我如何调用属性呢
public T this[int index]
{
get
{
...
}
set
{
if (dispatcher.CheckAccess())
{
...
}
else
{
dispatcher.Invoke(???, value, index); // <-- problem is here
}
}
}
public T此[int索引]
{
得到
{
...
}
设置
{
if(dispatcher.CheckAccess())
{
...
}
其他的
{
dispatcher.Invoke(???,值,索引);//编辑:以下段落不再适用,因为OP的问题已被编辑
首先,您的第二个代码在逻辑上似乎不正确:您显然想调用setter,但当您为索引提供一个值时,却没有提供实际的值(即项
)。我稍后将返回该问题
您可以将匿名委托或lambda函数包装在属性设置器周围,例如(使用匿名委托),以使其可调用:
dispatcher.Invoke(
new Action<T>( delegate (T item) { this[index] = item; } ),
item );
哎呀,忘了把value
传回去了。我明天会试试。我想我可以这样做,但我记不起正确的语法。为什么要把项传递给代理而不是索引?如果没有必要传递索引,那么也不必传递项?dispatcher.Invoke(new Action(()=>{this[index]=value;}));
通过查看您在问题中发布的代码,我假设dispatcher.Invoke
需要一个操作(即只有一个参数的委托)。但是,如果您可以传递两个参数,那么当然您也可以直接将index
传递给代理。选择最适合您的方法!@Mark:添加了第三个带有双参数lambda函数的代码示例。太棒了。感谢您的帮助:)
dispatcher.Invoke(
new Action<T>( (T item) => { this[index] = item; } ),
item );
dispatcher.Invoke(
new Action<int,T>( (int index, T item) => { this[index] = item; } ),
index, item );