本文整理汇总了C#中System.CodeDom.CodeMethodInvokeExpression.GetType方法的典型用法代码示例。如果您正苦于以下问题:C# CodeMethodInvokeExpression.GetType方法的具体用法?C# CodeMethodInvokeExpression.GetType怎么用?C# CodeMethodInvokeExpression.GetType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.CodeDom.CodeMethodInvokeExpression
的用法示例。
在下文中一共展示了CodeMethodInvokeExpression.GetType方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: SerializeInstanceDescriptor
private CodeExpression SerializeInstanceDescriptor (IDesignerSerializationManager manager, InstanceDescriptor descriptor)
{
CodeExpression expression = null;
MemberInfo member = descriptor.MemberInfo;
CodeExpression target = new CodeTypeReferenceExpression (member.DeclaringType);
if (member is PropertyInfo) {
expression = new CodePropertyReferenceExpression (target, member.Name);
} else if (member is FieldInfo) {
expression = new CodeFieldReferenceExpression (target, member.Name);
} else if (member is MethodInfo) {
CodeMethodInvokeExpression methodInvoke = new CodeMethodInvokeExpression (target, member.Name);
manager.Context.Push (new ExpressionContext (methodInvoke, methodInvoke.GetType (), null, null));
if (descriptor.Arguments != null && descriptor.Arguments.Count > 0)
methodInvoke.Parameters.AddRange (SerializeParameters (manager, descriptor.Arguments));
manager.Context.Pop ();
expression = methodInvoke;
} else if (member is ConstructorInfo) {
CodeObjectCreateExpression createExpr = new CodeObjectCreateExpression (member.DeclaringType);
manager.Context.Push (new ExpressionContext (createExpr, createExpr.GetType (), null, null));
if (descriptor.Arguments != null && descriptor.Arguments.Count > 0)
createExpr.Parameters.AddRange (SerializeParameters (manager, descriptor.Arguments));
manager.Context.Pop ();
expression = createExpr;
}
return expression;
}
示例2: SerializeCollection
protected virtual object SerializeCollection (IDesignerSerializationManager manager, CodeExpression targetExpression,
Type targetType, ICollection originalCollection, ICollection valuesToSerialize)
{
if (valuesToSerialize == null)
throw new ArgumentNullException ("valuesToSerialize");
if (originalCollection == null)
throw new ArgumentNullException ("originalCollection");
if (targetType == null)
throw new ArgumentNullException ("targetType");
if (manager == null)
throw new ArgumentNullException ("manager");
if (valuesToSerialize.Count == 0)
return null;
MethodInfo method = null;
try {
object sampleParam = null;
IEnumerator e = valuesToSerialize.GetEnumerator ();
e.MoveNext ();
sampleParam = e.Current;
// try to find a method matching the type of the sample parameter.
// Assuming objects in the collection are from the same base type
method = GetExactMethod (targetType, "Add", new object [] { sampleParam });
} catch {
Console.WriteLine ("SerializeCollection: No compatible Add method found in " + targetType);
}
if (method == null)
return null;
CodeStatementCollection statements = new CodeStatementCollection ();
foreach (object value in valuesToSerialize) {
CodeMethodInvokeExpression methodInvoke = new CodeMethodInvokeExpression ();
methodInvoke.Method = new CodeMethodReferenceExpression (targetExpression, "Add");
manager.Context.Push (new ExpressionContext (methodInvoke, methodInvoke.GetType (), null, originalCollection));
CodeExpression expression = base.SerializeToExpression (manager, value);
if (expression == null) {
Console.WriteLine ("SerializeCollection: Unable to serialize " + value);
methodInvoke = null;
} else {
methodInvoke.Parameters.AddRange (new CodeExpression[] { expression });
}
manager.Context.Pop ();
if (methodInvoke != null)
statements.Add (methodInvoke);
}
return statements;
}