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;