【发布时间】:2016-01-24 16:01:09
【问题描述】:
我是 C# 脚本的新手。
我正在阅读一些代码,并且在一个类方法中调用了一个函数以添加到一个名为 Listeners 的 Dictionary 实例,如下所示:
public class ......
{
private Dictionary<string, List<Component>> Listeners =
new Dictionary<string, List<Component>>();
public void AddListener(Component Listener, string NotificationName)
{
// Add listener to dictionary
if (!Listeners.ContainsKey(NotificationName))
Listeners.Add (NotificationName, new List<Component>());
// Add object to listener list for this notification
Listeners[NotificationName].Add(Listener);
}
}
现在,对 Listeners.Add 的调用似乎有一个构造函数调用
new List<Component>()
作为论据。
我说对了吗?
【问题讨论】:
-
一些能让你的生活更轻松的事情。首先,方法声明中缺少逗号,对吗?其次,使用
camelCaseConvention而不是PascalCaseConvention命名你的局部变量、形式参数和局部变量。对于有经验的 C# 程序员来说,看到一个名为NotificationName的正式文件,读起来很奇怪。应该是notificationName。编译器不在乎,但如果你不遵循标准命名约定,你的代码的读者会对你的代码有错误的直觉。 -
你永远不会有一个 call 作为参数。你要么有调用的返回值,要么有一个函数指针。
-
@ThomasWeller:我对你的评论感到困惑。很明显,argument 是一个调用——或者更确切地说,是一个对象创建;与实参对应的形参的值将是评估对象创建所产生的值。说“参数不是调用,它是评估调用的结果”似乎很奇怪。你会对整数文字说同样的话吗?
abc(123)的参数不是整数文字,它是通过评估整数文字产生的值?这是一个令人毛骨悚然的区别。所有表达式的值就是它们的求值! -
@ThomasWeller:C# 规范中没有任何地方说调用是
call指令。它说调用是一个表达式,其值是调用的结果,它说arguments是表达式 i>,它表示实参对应于形参,它表示表达式的值将被复制到形参。参数是表达式。调用是表达式。因此,参数可以是调用。这对我来说似乎很简单。 -
@kain64b:这不是那个问题的重复。这个问题专门关于字典代码。这个问题是关于使用复杂表达式作为参数的一般模式;碰巧是关于字典的,这只是巧合。
标签: c#