本文整理匯總了C#中System.Type.Type.GetElementType方法的典型用法代碼示例。如果您正苦於以下問題:C# Type.Type.GetElementType方法的具體用法?C# Type.Type.GetElementType怎麽用?C# Type.Type.GetElementType使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類System.Type.Type
的用法示例。
在下文中一共展示了Type.Type.GetElementType方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: CoerceList
private object CoerceList(Type targetType, Type arrayType, IEnumerable value)
{
if (targetType.IsArray)
{
return this.CoerceArray(targetType.GetElementType(), value);
}
// targetType serializes as a JSON array but is not an array
// assume is an ICollection / IEnumerable with AddRange, Add,
// or custom Constructor with which we can populate it
// many ICollection types take an IEnumerable or ICollection
// as a constructor argument. look through constructors for
// a compatible match.
ConstructorInfo[] ctors = targetType.GetConstructors();
ConstructorInfo defaultCtor = null;
foreach (ConstructorInfo ctor in ctors)
{
ParameterInfo[] paramList = ctor.GetParameters();
if (paramList.Length == 0)
{
// save for in case cannot find closer match
defaultCtor = ctor;
continue;
}
if (paramList.Length == 1 &&
TypeCoercionUtility.GetTypeInfo(paramList[0].ParameterType).IsAssignableFrom(TypeCoercionUtility.GetTypeInfo(arrayType)))
{
try
{
// invoke first constructor that can take this value as an argument
return ctor.Invoke(
new object[] { value }
);
}
catch
{
// there might exist a better match
continue;
}
}
}
if (ConstructorInfo.Equals (defaultCtor, null)) {
throw new JsonTypeCoercionException (
String.Format (TypeCoercionUtility.ErrorDefaultCtor, new System.Object[] { targetType.FullName }));
}
object collection;
try
{
// always try-catch Invoke() to expose real exception
collection = defaultCtor.Invoke(null);
}
catch (TargetInvocationException ex)
{
if (ex.InnerException != null)
{
throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException);
}
throw new JsonTypeCoercionException("Error instantiating " + targetType.FullName, ex);
}
// many ICollection types have an AddRange method
// which adds all items at once
#if WINDOWS_STORE
/** \todo Not sure if this finds the correct methods */
MethodInfo method = TCU.GetTypeInfo(targetType).GetDeclaredMethod("AddRange");
#else
MethodInfo method = TypeCoercionUtility.GetTypeInfo(targetType).GetMethod("AddRange");
#endif
ParameterInfo[] parameters = (MethodInfo.Equals (method, null)) ?
null : method.GetParameters();
Type paramType = (parameters == null || parameters.Length != 1) ?
null : parameters[0].ParameterType;
if (!Type.Equals (paramType, null) &&
TypeCoercionUtility.GetTypeInfo(paramType).IsAssignableFrom (TypeCoercionUtility.GetTypeInfo(arrayType)))
{
try
{
// always try-catch Invoke() to expose real exception
// add all members in one method
method.Invoke(
collection,
new object[] { value });
}
catch (TargetInvocationException ex)
{
if (ex.InnerException != null)
{
throw new JsonTypeCoercionException(ex.InnerException.Message, ex.InnerException);
}
throw new JsonTypeCoercionException("Error calling AddRange on " + targetType.FullName, ex);
}
return collection;
}
else
{
// many ICollection types have an Add method
//.........這裏部分代碼省略.........