我需要做的是這樣的事情,但真的不明白如何。按類型C設置對象#
Object value = new typeof(i.FieldType.GetType());
值的類型可以是任何東西,它只是繼承一個類(例如,BaseClass)。該類型將從(.Net)System.Reflections中讀取。但我不知道如何創建一個新的對象。
如何創建一個新的()對象(構造函數),對象存儲爲對象,其中的類型如果System.Reflections已知?
我需要做的是這樣的事情,但真的不明白如何。按類型C設置對象#
Object value = new typeof(i.FieldType.GetType());
值的類型可以是任何東西,它只是繼承一個類(例如,BaseClass)。該類型將從(.Net)System.Reflections中讀取。但我不知道如何創建一個新的對象。
如何創建一個新的()對象(構造函數),對象存儲爲對象,其中的類型如果System.Reflections已知?
您可以使用ConstructorInfo類
var constructorInfo = typeof(myclasstype).GetConstructor();
if (constructorInfo != null)
{
var myclass = constructorInfo.Invoke();
}
這可能是很難做到的。見奧利弗在問題下面的評論。 –
你真的需要在所有的構造類型?如果你想動態地將字符串轉換爲類型(根據你的評論之一),那麼你所需要的只是System.Convert.ChangeType
方法。
object convertedValue = Convert.ChangeType(stringValue, i.FieldType.GetType());
當第二參數ChangeType
是System.Type
。
的Activator
實際上只是需要,如果你想創建新的(空)動態對象。如果您所說的字段類型是標準類型,如string
,int
或bool
,則Convert.ChangeType
將執行此操作。
這聽起來像是我需要一個工廠方法。見https://en.wikipedia.org/wiki/Factory_method_pattern –
我想這可能會有所幫助:http://stackoverflow.com/questions/6472980/how-to-instantiate-the-class-in-an-assembly-using - 與c-net的反射? –
除非你正在寫一些專門的東西,否則一個通用的應用程序不需要反射。按照@Robert的建議使用基類,接口或者工廠,你應該沒問題。解釋你以後如何使用這些代碼。 – CodeCaster