Почему я должен выполнить ldarg.0 перед вызовом поля в MSIL?
Я хочу вызвать функцию с параметрамиstring
иInt32
,string
это просто буквальное,Int32
должен бытьfield
, Поэтому я подумал, что это должно быть что-то вроде:
.method public hidebysig instance string TestVoid() cil managed
{
.maxstack 1
.locals init (
[0] string CS и0000)
L_0000: nop
L_0001: ldstr "myString"
L_0006: ldfld int32 FirstNamespace.FirstClass::ByteField
L_000b: call string [Class1]Class1.TestClass::Functie<int32>(string, int32)
L_0010: ret
}
Но это выдает ошибку, что это неверный код. При добавлении
ldarg.0
доldfld
это работает просто отлично. Почему это, и это вызовет у меня проблемы, когда у меня будет больше полей?