我今天下午刚开始使用C#,所以要温和一点.
目前我正在开发一种"模板引擎",其中一个回调需要生成一个全局唯一的ID.我正在使用委托来管理回调.
目前代码看起来像这样(虽然我也尝试过匿名函数并直接返回NewGuid w/oa变量):
static string UID(List<string> p)
{
string s = Guid.NewGuid().ToString();
return s;
}
Run Code Online (Sandbox Code Playgroud)
哪个,直接调用,工作正常.但是,如果我尝试通过委托调用它(添加到StringDictionary via addCallback("generate UID", new CallbackWrapper(UID))),程序将生成相同的GUID,无论我复制它多少次; 即使在事件发生之前和之后直接调用方法,也会产生预期的唯一ID.我心中已经
毫无疑问,这只是我错过的一些简单的东西,不可避免地源于我对C#相对缺乏经验.
任何帮助,将不胜感激.
谢谢.
好吧,我现在尝试使用相同结果的词典.
CallbackWrapper只是委托,它的定义如下:
delegate string CallbackWrapper(List<string> parameters);
Run Code Online (Sandbox Code Playgroud)
剩下的工作是在另一个类中完成的,如下所示:
class TemplateParser
{
private Dictionary<string, CallbackWrapper> callbackMap;
public TemplateParser(string directivePrefix, string directiveSuffix)
{
...
callbackMap = new Dictionary<string,CallbackWrapper>();
}
public TemplateParser() : this("<!-- {", "} -->") {}
{
callbackMap.Add(name, callback);
}
public string parse(string filename)
{
...
string replacement =
callbackMap[directiveName](new List<string>(parameters.Split(new string[] { ";", " " }, StringSplitOptions.RemoveEmptyEntries));
...
}
}
Run Code Online (Sandbox Code Playgroud)
我已经删除了大部分字符串处理代码以节省一些空间.
问题出在您的调用代码中,而不是在代码本身中,也不在委托中。
如果调用正确的话,在这里使用委托肯定是有效的。
此外,您的代码可以稍微简化:
static string UID(List<string> p)
{
return Guid.NewGuid().ToString();
}
Run Code Online (Sandbox Code Playgroud)
(这个变量完全是多余的。)
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |