मैं निम्नलिखित आईएल (परावर्तक से) सामान्यीकरण करने के लिए कोशिश कर रहा हूँ: DynamicMethod साथ जब मैं कोशिशऔर मूल्य प्रकार के साथ DynamicMethod "ऑपरेशन क्रम destablize सकता है"
.method private hidebysig instance void SetValue(valuetype Test.TestFixture/ValueSource& thing, string 'value') cil managed
{
.maxstack 8
L_0000: nop
L_0001: ldarg.1
L_0002: ldarg.2
L_0003: call instance void Test.TestFixture/ValueSource::set_Value(string)
L_0008: nop
L_0009: ret
}
हालांकि, और पुन: पेश इस आईएल:
[Test]
public void Test_with_DynamicMethod()
{
var sourceType = typeof(ValueSource);
PropertyInfo property = sourceType.GetProperty("Value");
var setter = property.GetSetMethod(true);
var method = new DynamicMethod("Set" + property.Name, null, new[] { sourceType.MakeByRefType(), typeof(string) }, true);
var gen = method.GetILGenerator();
gen.Emit(OpCodes.Ldarg_1); // Load input to stack
gen.Emit(OpCodes.Ldarg_2); // Load value to stack
gen.Emit(OpCodes.Call, setter); // Call the setter method
gen.Emit(OpCodes.Ret);
var result = (SetValueDelegate)method.CreateDelegate(typeof(SetValueDelegate));
var source = new ValueSource();
result(ref source, "hello");
source.Value.ShouldEqual("hello");
}
public delegate void SetValueDelegate(ref ValueSource source, string value);
मुझे "ऑपरेशन रनटाइम को अस्थिर कर सकता है" का अपवाद मिलता है। आईएल मेरे जैसा कोई विचार है, कोई विचार? ValueSource एक मान प्रकार है, इसलिए मैं यहां एक रेफ पैरामीटर कर रहा हूं।
संपादित
यहाँ ValueSource प्रकार है:
public struct ValueSource
{
public string Value { get; set; }
}
(उम्मीद सरल) ValueSource का कोई भी मौका तो हम पुन: पेश कर सकते हैं ...? –
इसके अलावा - मूल्य-प्रकार वास्तव में अपरिवर्तनीय होना चाहिए, जो इस मूत को प्रस्तुत करेगा ... –