我想創建一個工具,它通過反射調用庫中的所有函數,爲此我需要獲取方法信息和參數信息。我能夠得到這些參數信息(如果它是int = 0,string = empty,float = 0,enum =獲取類型值和0索引值,如果參數是某種類型(isClass)空值。)。獲取枚舉類型並創建該類型的列表,獲取類類型並使用該類型創建具有反射的列表
在這種情況下,我有一個問題,有一些功能,現在使用參數List<int> List<enum>, list<type>
而創建這些參數的默認值是有點具有挑戰性的我,任何人都可以幫助我這一點。
1)列表或任何數字列表默認值應List<int> defaultValueList = new List<int>(){0};
2)對於list<Enum> enumDefault = new List<Enum>(){ Enum.Getvalues(0)}
3),用於列表class_Default =獲得的類型,創建實例,把它添加到一個列表初始化之後(它不應該是空那就是隻是我在這個計劃目標。
任何幫助,將不勝感激
一些代碼示例(請注意,上述定義的名稱無關,與下面的例子)
private object[] GetParameterInfoDefault(ParameterInfo[] pInfo)
{
int count = pInfo.Count();
object[] objDefaultValues = new object[count] ;
try
{
int i = 0;
foreach (ParameterInfo info in pInfo)
{
objDefaultValues[i] = GetDefaultValurForTypes(info);
i++;
}
}
catch (Exception ex)
{
}
return objDefaultValues;
}
編輯
我想在這個函數的每個參數,但對於列表在這裏創建默認值,我不知道什麼必須做的功能
private object GetDefaultValurForTypes(ParameterInfo info)
{
object objectDefaultValue = new object();
try
{
if (info.ParameterType.UnderlyingSystemType.Name.Equals("List`1"))
{
List<object> objList ;
Type[] tempTypes = info.ParameterType.GetGenericArguments();
foreach (Type tempT in tempTypes)
{
if (tempT.UnderlyingSystemType == typeof(int))
{
objectDefaultValue = (tempT.UnderlyingSystemType.GetType()) ;
objectDefaultValue = 1;
}
else if (tempT.UnderlyingSystemType.IsEnum)
{
Array arr = tempT.UnderlyingSystemType.GetEnumValues();
objectDefaultValue = arr.GetValue(0);
}
else if (tempT.UnderlyingSystemType.IsClass)
{
objectDefaultValue = Activator.CreateInstance(tempT);
//FieldInfo [] fldInfo = tempT.UnderlyingSystemType.GetFields();
//object [] fldInfoDefaultValues = new object[fldInfo.Count()];
//int i = 0;
//foreach (FieldInfo fldinf in fldInfo)
//{
// fldInfoDefaultValues[i] = fldInfo.get
//}
}
}
}
else if (info.ParameterType.BaseType == typeof(Enum))
{
//object underlyingValue = Convert.ChangeType(Enum.GetUnderlyingType(value.GetType()));
Array arrayValue = info.ParameterType.GetEnumValues();
objectDefaultValue = arrayValue.GetValue(0);
//var value = propertyInfo.GetValue(obj); // this return TestOne or TestTwo
//var enumValue = Convert.ChangeType(value, typeof(int)); // this return 3 or 4
}
//else if(info.ParameterType.BaseType == System
//{
//}
//else if (info.ParameterType.BaseType == typeof(int) || info.ParameterType.BaseType == typeof(float) || info.ParameterType.BaseType == typeof(double))
// objectDefaultValue = 0;
else if (info.ParameterType == typeof(bool))
objectDefaultValue = false;
else if (info.ParameterType == typeof(int))
objectDefaultValue = 1;
else if (info.ParameterType == typeof(string))
objectDefaultValue = string.Empty;
//else if(info.ParameterType. == typeof(
else
objectDefaultValue = 0;
}
catch (Exception ex)
{
}
return objectDefaultValue;
}
謝謝你這爲我工作。 :) – ansar