C# 什么是惯用代码?
我会对一些前后c#示例感兴趣,一些非惯用与惯用的示例。非c类的例子如果能让人理解这个想法,也可以。谢谢。惯用代码是以您的语言的通用方式执行常见任务的代码。它类似于设计模式,但规模要小得多。习语因语言而大不相同。C#中的一个习惯用法可能是使用迭代器迭代集合,而不是循环遍历集合。其他没有迭代器的语言可能依赖循环惯用语。惯用语意味着遵循该语言的约定。你想找到完成任务的最简单和最常见的方法,而不是从不同的语言移植你的知识 使用带有append的循环的非惯用python:C# 什么是惯用代码?,c#,C#,我会对一些前后c#示例感兴趣,一些非惯用与惯用的示例。非c类的例子如果能让人理解这个想法,也可以。谢谢。惯用代码是以您的语言的通用方式执行常见任务的代码。它类似于设计模式,但规模要小得多。习语因语言而大不相同。C#中的一个习惯用法可能是使用迭代器迭代集合,而不是循环遍历集合。其他没有迭代器的语言可能依赖循环惯用语。惯用语意味着遵循该语言的约定。你想找到完成任务的最简单和最常见的方法,而不是从不同的语言移植你的知识 使用带有append的循环的非惯用python: mylist = [1, 2,
mylist = [1, 2, 3, 4]
newlist = []
for i in mylist:
newlist.append(i * 2)
使用列表理解的惯用python:
mylist = [1, 2, 3, 4]
newlist = [(i * 2) for i in mylist]
一些例子:
资源管理,非惯用:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
var list2 = list1.Where(num=>num>100);
惯用语:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
foreach (Item item in list) {
DoSomething(item);
}
迭代,非惯用:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
var list2 = list1.Where(num=>num>100);
惯用语:
string content;
using (StreamReader sr = File.OpenText(path)) {
content = sr.ReadToEnd();
}
foreach (Item item in list) {
DoSomething(item);
}
过滤,非惯用:
string content;
StreamReader sr = null;
try {
File.OpenText(path);
content = sr.ReadToEnd();
}
finally {
if (sr != null) {
sr.Close();
}
}
for (int i=0;i<list.Count; i++) {
DoSomething(list[i]);
}
IEnumerator e = list.GetEnumerator();
do {
DoSomenthing(e.Current);
} while (e.MoveNext());
List<int> list2 = new List<int>();
for (int num in list1) {
if (num>100) list2.Add(num);
}
var list2 = list1.Where(num=>num>100);
实际上,这意味着以一致的方式编写代码,即所有在代码库上工作的开发人员在编写类似的代码构造时都应该遵循相同的约定 所以惯用的方式是与其他代码的风格相匹配的方式,非惯用的方式意味着您正在以不同的方式编写函数 e、 g.如果您循环一定数量的项目,您可以用几种方式编写循环:
for (int i = 0; i < itemCount; i++)
for (int i = 1; i <= itemCount; i++)
for (int i = 0; i < itemCount; ++i)
for(int i=0;i 对于PHP中的(inti=1;i,我有时会遇到如下代码:
foreach ($array as $value) {
$trimmed[] = trim($value);
}
return $trimmed;
按照惯例,可通过以下方式实现:
return array_map('trim', $array);
我想我认为成语的意思是“最好的方式”与仅仅是一个武断的标准相反。但我想最好的方法是根据上下文。充满了惯用的C#。请注意,并非所有的都是这样,但许多带有大量向上投票的简单的一行程序可以被认为是惯用的。一些答案也描述了非惯用的替代方法。大括号是惯用的Java;-)