C# 将对象列表中的对象强制转换为类型返回左手签名必须是变量错误
本文关键字:对象 错误 变量 返回 类型 列表 转换 | 更新日期: 2023-09-27 18:36:55
不确定如何处理
标题,但是当我尝试在列表中投射对象时,出现该错误。
这是我尝试的:
(type)objectList[i] = typeValue;
我希望这能奏效,但事实并非如此。我可以得到一些重写的帮助吗?
C# 中的=
符号是赋值运算符。它将等号右侧的值分配给左侧的变量。
你把你的陈述倒过来
您可以像这样将objectList[i]
分配给typeValue
的值
objectList[i] = typeValue;
如果 objectList
是 type
类型的数组,并且typeValue
已经是 type
类型的变量,则不需要强制转换。
如果typeValue
不是类型 type
那么你可以像这样投射它
(type)typeValue
希望这能澄清情况
我不完全确定你的意思,但如果objectList
是typeof(object)
中的数组,则不需要强制转换。如果您尝试转换typeValue
,则分配它,您将使用:
objectList[i] = (type)typeValue;
将对象强制转换为其他类型时,返回值为常量。 值必须是变量才能接受赋值。
也就是说,正确的投射和分配方式是这样的:
FooInstance = (Foo)BarInstance; // this is a correct cast
上面的代码从强制转换中创建一个 Foo 类型的常量值,然后将其值分配给 FooInstance,这是一个变量。
(Bar)FooInstance = BarInstance; // this will cause a compiler error
如果允许运行此代码,将尝试将 BarInstance 的值分配给由强制转换创建的 Bar 类型的常量值。 由于无法分配给常量,因此这是一个错误。
FooInstance = FooInstance2; // this works - no cast necessary
FooInstance = (Foo)FooInstance2; // this cast is unnecessary, but won't cause an error
(Foo)FooInstance = FooInstance2; // this will cause a compiler error
即使它们属于同一类型,(Foo)FooInstance 也是常量,因此它不能接受 FooInstance2 的值。 另一方面,FooInstance是一个变量,因此它可以接受Foo类型的任何值。