我有一个string []参数来自列表框。根据用户的选择数量,我希望相应地分配var类型。
var intKonsoler = konsoler.Length > 1 ? konsoler.Select(int.Parse).ToArray() : int.Parse(konsoler[0]);
var intGenres = genres.Length > 1 ? genres.Select(int.Parse).ToArray() : int.Parse(genres[0]);
这显然不会起作用,我得到了:
Type of conditional expression cannot be determined because there is no implicit conversion between 'int[]' and 'int'
那么我想要获得什么?如果string []只包含一个值,我想要将var指定为字符串[]中的int,如果包含多个值,则希望将int []与字符串[]中的值相对应。
答案 0 :(得分:2)
您应该无条件地拥有一个整数数组,而不是拥有一个整数数组或一个整数的变量。如果您不知道变量是单个值还是值集合,那么您几乎无法使用它。如果您知道它是一个集合,如果它的大小为1,您仍然可以有效地使用它。
让你的第二个选项创建一个内联的单项数组:
var intKonsoler = konsoler.Length > 1 ?
konsoler.Select(int.Parse).ToArray() :
new[]{int.Parse(konsoler[0])};
或者,更好的是,只需删除条件检查以查看集合的长度是否为1:
var intKonsoler = konsoler.Select(int.Parse).ToArray();
如果它的大小为1,则没有理由以不同的方式处理此集合(在执行此特定操作时)。
答案 1 :(得分:0)
if else有什么问题?
dynamic intKonsoler;
if(konsoler.Length > 1)
{
intKonsoler = konsoler.Select(int.Parse).ToArray();
}
else
{
inKonsoler = int.Parse(konsoler[0]);
}
答案 2 :(得分:0)
直接答案:那是不可能的。
好像你误解了var
关键字。它与Variant
或某些COM
方言中的VB
无关。对于较长类型的声明(称为 syntactic sugar ),它只是一个方便的快捷方式,其具体类型必须由编译器在编译时确定。
换句话说:你要做的就是写作
int intKonsoler = konsoler.Length > 1 ? konsoler.Select(int.Parse).ToArray() : int.Parse(konsoler[0]);
这是完全错的,我害怕......
修改强>:
当然,您可以使用dynamic
关键字,如其他答案所述。但是你为什么要那样做呢?这将违背C#作为静态类型语言的整个想法。