第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過反射設(shè)置作為通用接口的字段的值?

如何通過反射設(shè)置作為通用接口的字段的值?

C#
蠱毒傳說 2022-09-04 16:51:43
我希望能夠使用反射來獲取類的成員,例如,IList 類型,并且我想為它創(chuàng)建一個委托,以便我為反射支付更少的費用。所有這一切,為了在晚些時候,我能夠通過傳遞我的實例和一個新的列表來呼叫代表。每當(dāng)我嘗試這樣做時,C#都會給我無效的強制轉(zhuǎn)換異常。我是否遺漏了泛型的愚蠢之處?我嘗試過使用沒有泛型的界面字段,這些字段似乎工作得很好。我似乎只在使用泛型時遇到問題。我還嘗試使用Convert.ChangeType將我的輸入轉(zhuǎn)換為所需的類型,并且我收到了有關(guān)List的錯誤<>沒有實現(xiàn)IConvertible。如果我可以使用反射從具體的List<>類型設(shè)置一個值<>我將很高興:)using System;using System.Collections.Generic;using System.Linq.Expressions;using System.Reflection;public class MyObject{    public IList<int> MyField;}public class ReflectionPerfTesting{    public void Run()    {        var testObject = new MyObject();        var field = testObject.GetType().GetField("MyField", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);        InvokeUsingReflection(field, testObject);    }    private void InvokeUsingReflection(FieldInfo fieldInfo, object testObject)    {        var fieldType = fieldInfo.FieldType;        var sourceType = fieldInfo.DeclaringType;        // ZAS: create value parameter        var valueParam = Expression.Parameter(fieldType);        // ZAS: create targetParameter        var sourceParam = Expression.Parameter(sourceType);        var field = Expression.Field(sourceParam, fieldInfo);        var returnExpression = (Expression)Expression.Assign(field, valueParam);        if (!fieldType.IsClass)        {            returnExpression = Expression.Convert(returnExpression, fieldType);        }    }}預(yù)期的結(jié)果是,我能夠?qū)ⅰ皊etter”緩存到屬性中,并支持設(shè)置任何類型的值,包括泛型和接口。我目前的結(jié)果是,設(shè)置任何類型的值都有效,除非有泛型...所以我一定是做錯了什么。
查看完整描述

1 回答

?
莫回?zé)o

TA貢獻1865條經(jīng)驗 獲得超7個贊

您的 lambda 調(diào)用是錯誤的。您必須在 lambda 對象上調(diào)用該方法,該對象傳遞目標(biāo)以及參數(shù)。Invoke


如果修復(fù)調(diào)用,您將獲得所需的結(jié)果:


testObject.Dump();


var list = new List<int>();

lambdaInvokeMethod.Invoke(lambda, new object[] { testObject, list });


testObject.Dump();

Dumping object(MyObject)

 MyField  : null

Dumping object(MyObject)

 MyField  : []

請參見: https://dotnetfiddle.net/FZN3iX


查看完整回答
反對 回復(fù) 2022-09-04
  • 1 回答
  • 0 關(guān)注
  • 91 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號