【发布时间】:2021-05-15 09:34:33
【问题描述】:
我正在通过实现IMultiValueConverter with *Convert(object[] values, Type targetType, object parameter, CultureInfo culture)来创建转换器
我正在传递一个List<(SomeEnumType, string)> 元组。
通过 MultiBinding 并在转换器端我想进行转换,但它会引发转换错误。
我试过了:
var result = (List<(Enum, string)>)values[1];
但我遇到了这个选角问题:
'无法将'System.Collections.Generic.List1[System.ValueTuple2[Vasco.Basics.Contracts.CoreConfigurations.Enums.ApplicationType,System.String]]'类型的对象转换为'System.Collections.Generic。 List1[System.ValueTuple2[System.Enum,System.String]]'.'
这很奇怪,因为如果我只传递 SomeEnumType 的一个元素并尝试像(Enum)values[1] 这样的大小写效果很好。
当我通过List<SomeEnumType> 并尝试像(List<Enum>)values[1] 一样投射时已经不起作用了。
提前谢谢你!
【问题讨论】:
-
如果它是一个元组列表,为什么不这样声明:
List<Tuple<SomeEnumType, string>> tuple? -
您能否发布更多代码,以便我们了解可能发生的情况,好吗?要转换为列表,最好使用 Linq 扩展方法,例如
values[1].ToList(). -
@jonathana 在最新版本的 C# (7+) 中这是声明元组的方式 - docs.microsoft.com/en-us/dotnet/csharp/language-reference/…。
-
@bcg 不知道,感谢更新。
-
就像 jonathana 说的你应该像 List
> 一样声明元组