【问题标题】:Action Type C# can return a type?Action Type C#可以返回一个类型吗?
【发布时间】:2021-12-15 16:18:20
【问题描述】:

我正在查看代码,我看到它说

public Action<MainViewModel, MainViewModel> SetView { get; }

这是否表明动作SetView 正在接收一些东西?我认为动作类型总是无效的?

另外,(ViewModel.SetView) 部分是什么意思?该类型是否转换为SetView

SetView = new Action<MainViewModel,MainViewModel>(ViewModel.SetView)

【问题讨论】:

  • 一般来说,Action&lt;T&gt; 不会返回任何内容。 Func&lt;T&gt; 会。
  • Does this indicate that the Action SetView is receiving something? 表示SetView正在返回一个Action&lt;MainViewModel, MainViewModel&gt;对象。

标签: c# delegates action


【解决方案1】:

Action 类型只能传参数。如果你想返回一个值,那么你可以使用Func&lt;&gt;

在您的示例中,SetView 是一个采用 Action&lt;MainViewModel,MainViewModel&gt; 的属性,这意味着该属性应设置为接受 2 个 MainViewModel 作为参数的方法,如下所示:

void MyMethod(MainViewModel model1, MainViewModel model2)
{ ... }

除了你的只是一个getter,所以我假设它是在构造函数中设置的。

为了回答您的进一步问题,这是prototype for Action

public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);

SetView = new Action(ViewModel.SetView);

这是在属性 SetView 上调用 set 方法,方法 (ViewModel.SetView) 采用 2 个 MainViewModel 参数。

你是否有可能在一个类中有一个名为 SetView 的属性,而在视图模型类中有一个名为 SetView 的函数?

【讨论】:

  • 谢谢你的解释,你能解释一下这部分SetView = new Action&lt;MainViewModel,MainViewModel&gt;(ViewModel.SetView),我本来以为是SetView = new Action&lt;MainViewModel,MainViewModel&gt; FunctionName(Parameter),但是只有一个参数ViewModel.SetView,函数呢?跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多