【发布时间】:2013-01-21 11:50:00
【问题描述】:
我正在尝试编写某种强类型路由系统。 想象一下,我有一个带有方法 A 的类,它接受并返回字符串
public class SomeClass
{
public string MethodA(string str)
{
return string.Format("SomeClass :: MethodA {0}", str);
}
}
我希望我的主要方法看起来像这样
class Program
{
static void Main(string[] args)
{
var col = new SomeCollection();
col.Add<SomeClass>("url", c => c.MethodA("test")); //Bind MethodA to "url"
}
}
所以我的问题是:
- 添加方法签名应该是什么?
- 如何在 SomeCollection 中调用 MethodA?
我猜会是这样的
public class SomeCollection
{
public void Add<TController> (string url, Func<TController, string> exp)
{
// Add func to dictionary <url, funcs>
}
public void FindBestMatchAndExecute (Request request)
{
//Search url in collection and invoke it's method.
//Method params we can extract from request.
}
}
【问题讨论】:
-
问题是:你从哪里得到
SomeClass的实例应该被传递到 lambda 表达式中? -
@defaultlocale:
c是 lambda 表达式的参数,就像x在Select(x => x.Id)中一样。 -
@DanielHilgarth,谢谢,实际上我误读了这个问题。
-
Add的预期行为是什么? -
我更改了我原来的帖子,以便更容易弄清楚发生了什么)