C#中使用反射獲取結構體實例及思路
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)原來結構是不可以這樣實例化的
換種方式,似乎結構體使用反射無法得到其構造函數(shù)ConstructorInfo對象
類中有一個隱式的構造函數(shù),而結構沒有構造函數(shù)
我甚至嘗試查找非public構造函數(shù)
依然沒有
這問題一度困擾我很久....解決的方法并不難,所以也沒當回事,但今天有個朋友又問到了這個問題,所以總結一下發(fā)出來,給同樣遇到這個問題的朋友
其實非常簡單,只要這樣就可以了
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)建它的實例。
使用這個方法就不用管class還是struct 都是可以用的,如果是class只要保證有無參構造函數(shù)就可以了
這個方法不是什么高深的玩意兒,主要是給同樣碰到這個問題的同學說明一下
======================================================
感謝 KarasCanvas同學,原來C#還有Activator這么一個類
Activator.CreateInstance(Type)
這樣就可以了