C# 将对象列表中的对象强制转换为类型返回左手签名必须是变量错误

本文关键字:对象 错误 变量 返回 类型 列表 转换 | 更新日期: 2023-09-27 18:36:55

不确定如何处理

标题,但是当我尝试在列表中投射对象时,出现该错误。

这是我尝试的:

(type)objectList[i] = typeValue;

我希望这能奏效,但事实并非如此。我可以得到一些重写的帮助吗?

C# 将对象列表中的对象强制转换为类型返回左手签名必须是变量错误

C# 中的=符号是赋值运算符。它将等号右侧的值分配给左侧的变量。

你把你的陈述倒过来

您可以像这样将objectList[i]分配给typeValue的值

objectList[i] = typeValue;

如果 objectListtype 类型的数组,并且typeValue已经是 type 类型的变量,则不需要强制转换。

如果typeValue不是类型 type 那么你可以像这样投射它

(type)typeValue

希望这能澄清情况

我不完全确定你的意思,但如果objectListtypeof(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类型的任何值。