C# 元组<;这件事,布尔>;模板10中OnNavigatedToAsync的参数
我是否能够将C# 元组<;这件事,布尔>;模板10中OnNavigatedToAsync的参数,c#,uwp,tuples,template10,c#-7.0,C#,Uwp,Tuples,Template10,C# 7.0,我是否能够将元组作为参数传递给OnNavigatedToAsync?有没有更好的方法来传递这种信息 我已经试过了,但是在下面的Value=行中,我一直得到一个无效的强制转换异常。值键入为Tuple ViewModel.cs: public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState) {
元组作为参数传递给OnNavigatedToAsync
?有没有更好的方法来传递这种信息
我已经试过了,但是在下面的Value=
行中,我一直得到一个无效的强制转换异常。值键入为Tuple
ViewModel.cs:
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
{
Value = (Tuple<ThisThing, bool>)((suspensionState.ContainsKey(nameof(Value))) ? suspensionState[nameof(Value)] : parameter);
}
Edit1:
我已经试着把它简化为
public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
{
Value = (Tuple<ThisThing, bool>)parameter;
}
NavigatedToAsync上的公共重写异步任务(对象参数、NavigationMode模式、IDictionary SuspendionState)
{
值=(元组)参数;
}
当调试并在NavigatedToAsync上进入,并将鼠标悬停在参数
上时,我可以看到这正是我所期望的,元组
,但会导致下一行出现无效的CastException
。这里的问题是C#7.0元组不是系统。元组
,它们是System.ValueTuple
。因此,正确的演员阵容是:
Value = (ValueTuple<ThisThing, bool>)parameter;
这里的问题是C#7.0元组不是System.Tuple
,而是System.ValueTuple
。因此,正确的演员阵容是:
Value = (ValueTuple<ThisThing, bool>)parameter;
调试时不要将所有内容都放在一行中。您可以使用var x=suspensionState[nameof(Value)]
因此,通过调试器,您可以检查x
实际上是什么。显然这不是一个元组,对不起。我应该提到我已经做了类似的事情。编辑原始帖子。它显示为ValueTuple
不是Tuple
。现在深入研究一下。调试时不要把所有内容都放在一行中。您可以使用var x=suspensionState[nameof(Value)]
因此,通过调试器,您可以检查x
实际上是什么。显然这不是一个元组,对不起。我应该提到我已经做了类似的事情。编辑原始帖子。它显示为ValueTuple
不是Tuple
。现在深入研究一下,如果你想把这些项目命名为:Value=((ThisThing Myboog,bool MyBool))参数;如果您想将这些项命名为:Value=((ThisThing MyThing,bool MyBool))参数;
Value = ((ThisThing, bool))parameter;