C#Delegates&guid.newguid()

B.H*_*B.H 6 c#

我今天下午刚开始使用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)

我已经删除了大部分字符串处理代码以节省一些空间.

Kon*_*lph 1

问题出在您的调用代码中,而不是在代码本身中,也不在委托中。

如果调用正确的话,在这里使用委托肯定是有效的。

此外,您的代码可以稍微简化:

static string UID(List<string> p)
{
    return Guid.NewGuid().ToString();
}
Run Code Online (Sandbox Code Playgroud)

(这个变量完全是多余的。)