C#中使用反射獲取結(jié)構(gòu)體實(shí)例及思路
static void Main(string[] args)
{
Type type = typeof(MyObject);
object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null);
Console.WriteLine(obj);
}
class MyObject
{
}
之前我一直沒有發(fā)現(xiàn)原來結(jié)構(gòu)是不可以這樣實(shí)例化的

換種方式,似乎結(jié)構(gòu)體使用反射無法得到其構(gòu)造函數(shù)ConstructorInfo對象

類中有一個隱式的構(gòu)造函數(shù),而結(jié)構(gòu)沒有構(gòu)造函數(shù)
我甚至嘗試查找非public構(gòu)造函數(shù)

依然沒有
這問題一度困擾我很久....解決的方法并不難,所以也沒當(dāng)回事,但今天有個朋友又問到了這個問題,所以總結(jié)一下發(fā)出來,給同樣遇到這個問題的朋友
其實(shí)非常簡單,只要這樣就可以了
static void Main(string[] args)
{
Type type = typeof(MyStruct);
object obj1 = type.Assembly.CreateInstance(type.FullName);
}
struct MyStruct
{
}
這個方法說明
Assembly.CreateInstance
使用區(qū)分大小寫的搜索,從此程序集中查找指定的類型,然后使用系統(tǒng)激活器創(chuàng)建它的實(shí)例。
使用這個方法就不用管class還是struct 都是可以用的,如果是class只要保證有無參構(gòu)造函數(shù)就可以了

這個方法不是什么高深的玩意兒,主要是給同樣碰到這個問題的同學(xué)說明一下
======================================================
感謝 KarasCanvas同學(xué),原來C#還有Activator這么一個類
Activator.CreateInstance(Type)
這樣就可以了
相關(guān)文章
C# WinForm中Panel實(shí)現(xiàn)用鼠標(biāo)操作滾動條的實(shí)例方法
由于在WinForm中Panel不能直接響應(yīng)鼠標(biāo)的滾動事件,只好采用捕獲窗體的滾動事件。2013-03-03
c#利用Excel直接讀取數(shù)據(jù)到DataGridView
這個例子的功能是c#讀取excel文件,大家可以參考使用2013-11-11
C# 字符串、數(shù)組和List的截取和轉(zhuǎn)換實(shí)例
下面小編就為大家分享一篇C# 字符串、數(shù)組和List的截取和轉(zhuǎn)換實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-11-11
C#實(shí)現(xiàn)支付寶沙箱支付的項(xiàng)目實(shí)踐
本文主要介紹了C#實(shí)現(xiàn)支付寶沙箱支付的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
使用代理模式來進(jìn)行C#設(shè)計(jì)模式開發(fā)的基礎(chǔ)教程
這篇文章主要介紹了使用代理模式來進(jìn)行C#設(shè)計(jì)模式開發(fā)的基礎(chǔ)教程,代理模式主張?jiān)诳蛻舳撕湍繕?biāo)對象中間建立中介來降低程序設(shè)計(jì)的耦合度,需要的朋友可以參考下2016-02-02

