最近在读苏林,朱晔翻译的《C#4.0 图解教程》,书还不错,就是不知是翻译的问题还是排版的问题,书中出现多处错误,记录如下,方便自己对照,也方便有需要的朋友:
注:本人使用的中文版为2011年6月第1版,2011年6月北京第1次印刷。
1. 23页,中部,“除了C#提供的15种预定义类型”,而在21页中,明明写的是16种预定义类型,查看了英文原版之后,发现英文版也有这个问题,感觉应该是原作者的问题,因为dynamic类型是.Net4.0新加的类型,作者在21页的预定义类型介绍中加入了它,在23页的用户定义类型中却忘掉了。
2. 131页,图7-16错误,应该全部可见,而书中这里的图显示只有自身可见。(由网友jhlovett 发现)
1. 144页中提到“方括号内名称的元素是可选的”,但下方的图上却跟本没有方括号,这里应该在图中的两个“后缀”上加方括号。
145页上也有类似错误。
2. 154页中部,注释“False,因为后计算机前面的表达式”,此处根本翻译得连文法都不通,英文原文是"False, after evaluating first expression",个人觉得应翻译为"False,因为在计算前面的表达式之后"。
这句下的句子也有类似错误
3. 154页中表达式"bVal=(1==2)&&(9==iVal++);" 下方的两个注释标反了,(1==2)下应该标“错误”,"(9==iVal++)下应该标“不会被计算”。
4. 159页,图8-9右半部分没有本地化。
5. 163页,“运算符重载的方法声明需要”的第一条“声明比如是static和public的修饰符”,英文原文为"The declaration must use both the static and public modifiers",个人感觉应翻译为"声明必须同时使用static和public修饰符"。
6. 254页,下部“列方法叫做调用列表”,原文是“The list of methods is called the invocation list”,个人感觉翻译为“方法列表叫做调用列表” 。
7. 265页,中下方,“例如,如下匿名方法定义了参数y........”, 这里由于中文版的图15-13在这段话的上方,所以应该是"例如,如上匿名方法定义了参数y..."。
8. 267页,中下方,“如果语句块包含了一个返回语句”,英文原文是“If the statement block contains asingle return statement”,个人感觉应该翻译为“如果语句块仅包含了一个返回语句”。
9. 276页,中下方,“ 在方括号中放置自定义类“,原文为"Place the name of the custom class between the angle brackets” ,这里"angle brackets"应该是尖括号,而不是方括号。
10. 280页,对接口的定义“接口是表示一组函数成员而不实现。。。”,原文是“An interface is a reference type thatspecifies a set of function members but does not implement them”,这里“specifies”被翻译为“表示”,个人感觉翻译为“指定”会更好。
11. 281页,最下方,“要实现接口、类或结构,必须做两件事情”,这里应该是“要实现接口,类或结构必须做两件事情”。“接口”后不应该是顿号,而应是逗号,并且“结构”和“必须”之间无需逗号分隔。
12. 283页,下方,“接口声明只能包含如下类型的静态成员函数的声明”,原文为“An interface declaration can contain only declarations of the following kinds ofnonstatic function members”,这里nonstatic很显然应该翻译为“非静态”。
13. 289页,上部,“实现方法PrintOut2满足了两个接口的需求”,联系上下文,这里很明显不应是PrintOut2 ,而应是PringOut。
14. 294 页,上部,“因此它强制转换当前对象的引用。。。”,原文为“because it casts the reference to the current object。。。”,显然,这里的because应该翻译为“因为”,而不是“因此”。
15. 327页,下方的表19-2中,Interfacename没有本地化,原文中,这里的InterfaceName是和第一项ClassName表达相同级别意思的,而ClassName被翻译为了“类名”,InterfaceName却没有翻译。
16. 330页,下方对函数ReverseAndPrint调用做的注释“引用类型并调用”,原文为“Infer type and invoke”,应该是“推断类型并调用”。
17. 336页,下方示例中,对函数public S ReturnInt(S inValue)的注释的第二行“如果它不是int类型的”,原文为“but if it's int”,应该翻译为“但是如果它是int类型的”,书中的翻译和原意正好相反,也与上下文相矛盾。
18. 338页,中部,“尽管两个委托对象成对,并且从委托类型派生,但是它们都从object类型派生...”。这句话翻译得十分不通顺,原文为“Instead,both delegate objects are peers, deriving from type delegate, which derives from type object...”,个人感觉应该翻译为“相反,这两个委托是同等的,它们都派生自delegate类型,而delegate又是派生自object类型”。
19. 352页,中下部,“我们已经知道了非泛型接口IEnumerable接口和它的3个成员”,这里联系上下文,很显然应该是IEnumerator接口,而且英文原文用的也是IEnumerator。
20. 353页,图20-6上方,“T是有枚举数返回的类型”,应该是“T是由枚举数返回的类型”。
21. 356页,下方,“yield return 语句执行了序列中返回的下一项”,应该是“yield return 语句指定了序列中返回的下一项”。
22. 359页,下方图20-10的最右边两个反大括号的注解完全错误。书中上方的大括号注解为“迭代器对应Iterator”,下方大括号注解为“实现了对应Implements”,这两句看起来倒像是译者为了记录Iterator和Implements这两个词的意思而为自己做的备忘。
原文中上方大括号注解为“Implements IEnumerable <string>”,应翻译为“实现了IEnumerable <string>”;下方大括号注解为“Implements IEnumerator <string>”,应翻译为“实现了IEnumerator <string>”。
23. 363页,中下部,“注意,在图20-8中Reset方法被显示为灰色”,这里应该是图20-9。
24. 370页,中部,“在执行前面的代码后,lowNums ... ...,它包含的是IEnumerable<int>类型的对象。”这句话后面,在原文中针对IEnumerable<int>类型的对象还有一段描述,“which can perform the query if it’s called upon to do so later in the code”,应该翻译为“这个对象当其在后面的代码中被调用时才执行相应的查询。”,这个貌似是漏译了。
25. 371页,中下部,“如下的代码给出了用于查询4个int数组的查询表达式”, 原文为“The following code shows a query expression used to query an array of four ints.”,这里"an array of four ints"个人感觉翻译为“包含4个int元素的数组”较为合适,书中翻译过于直白,乍看之下给人以“总共有4个数组”的错觉。
26. 387页,最后一行,“产生一个布尔值的参数委托叫做谓词”,而388页的第一行,又写了“产生布尔值的参数委托叫做谓词”,很明显,这两句重复了。英文原文为“A parameter delegate that produces a Boolean value is called a predicate”。
27. 388页,中部,“注意,我们不需要声明Func代理类型”,英文原文为“Notice that you don’t need to declare the Funcdelegate type”,显然这里的“delegate type”应该翻译为“委托类型”。
28. 394页,表21-2,除表头外第三行,方法名称"Elements",这个很明显跟它上方的第二行的方法名称重复了,应该是“Element”。
29. 400页,中上部,“前面实例中使用的其他3个类型的节点是。。。”,原文为”Three other types of nodes used in the previous examples are...“,文中翻译的意思正好与原文相反,依据上下文,这里应该翻译为”前面实例中使用的节点外的其他3个类型是。。。”。
30. 400页,中部, XDeclaration一节下,“因此它其实是有关数据的元数据”,原文是“so it’s actuallymetadata about themetadata”,显然,应该翻译为“因此它其实是有关元数据的元数据”。
31. 400页,中下方,“注意,这里的示例中,第二个参数是一个字符串“,原文为”Notice that in this example, the second parameter is averbatim string“, 这里"verbatim string'应该明确翻译为”逐字字符串“。
32. 406页,中部,“这些构造函数是包含输入参数的方法”,原文为“These constructs are in the form of methods with input parameters”,这里的"constructs"是指文中上面提到的for和foreach两种语句结构,而且在上文中,construct都被翻译为“结构”,这里翻译为“构造函数”并不合适,整句应该翻译为“这些结构是包含输入参数的方法”。
33. 407页,中部,“对于这个方法有12个以下重载”,原文为"There aremore than a dozen overloads for this method",这里“more than a dozen”显然应该翻译为“12个以上”。
34. 445页,中部,“特性的的实例创建后就会调用构造函数,只有特性的消费者才能访问特性”,原文为"An instance of an attribute is created, and a constructor called, only when an attribute consumer accesses the attribute",翻译得很机械而且有点词不达意。个人感觉,这句在翻译时,应该倒装来翻译为“只有当消费者访问特性时,特性才会调用构造函数来创建一个特性实例。”
35. 461页,中下部,“Main可以被声明为类或结构”,原文为"Main can be declared in either a class or a struct",显然,这里的in没有被翻译出来,意思出现了较大的偏差,应该翻译为"Main可以被声明在类或结构中"。