62,046
社区成员
发帖
与我相关
我的任务
分享
public static int TryToInt(this string orgString)
{
var n = 0;
int.TryParse(orgString, out n);
return n;
}
public static bool TryDouble(this dynamic value, out double result)
{
if (value is double)
{
result = value;
return true;
}
else
return double.TryParse(value, out result);
}
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace ConsoleApplication1
{
class MyDynamicClass : DynamicObject
{
public void Bar(int param1)
{
Console.WriteLine("Bar() called. instance = {0}, param1 = {1}", this, param1);
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
var query = Assembly.GetAssembly(GetType()).GetTypes()
.SelectMany(x => x.GetMethods())
.FirstOrDefault(x => x.IsPublic && x.Name == binder.Name && x.IsStatic && x.GetParameters().Count() == args.Count() + 1 && x.GetParameters().First().ParameterType == GetType());
if (query != null)
{
result = query.Invoke(null, new object[] { this }.Concat(args).ToArray());
return true;
}
else
{
return base.TryInvokeMember(binder, args, out result);
}
}
}
static class MyExtendMethods
{
public static void Foo(MyDynamicClass instance, int param1)
{
Console.WriteLine("Foo() called. instance = {0}, param1 = {1}", instance, param1);
}
public static int add(MyDynamicClass instance, int param1, int param2)
{
return param1 + param2;
}
}
class Program
{
static void Main(string[] args)
{
dynamic obj = new MyDynamicClass();
obj.Foo(1);
obj.Bar(1);
int x = obj.add(1, 2);
Console.WriteLine(x);
}
}
}
Foo() called. instance = ConsoleApplication1.MyDynamicClass, param1 = 1
Bar() called. instance = ConsoleApplication1.MyDynamicClass, param1 = 1
3
Press any key to continue . . .