标签: language-features

使用C#3.0功能有什么缺点吗?

我喜欢C#3.0特性,特别是lambda表达式,自动实现的属性,或者在适当的情况下也隐式输入局部变量(var关键字),但当我的老板透露我正在使用它们时,他让我不要在工作中使用任何C#3.0功能.有人告诉我,对于大多数开发人员而言,这些功能并不标准且令人困惑,其实用性值得怀疑.我被限制只使用C#2.0功能,他也在考虑禁止匿名方法.

由于我们的目标是.NET Framework 3.5,因此我看不出这些限制的任何原因.在我看来,也许唯一的缺点是我的几个同事和老板(也是程序员)必须学习一些C#3.0的基础知识,这应该不难.你怎么看待这件事?我的老板是对的,我错过了什么吗?在C#是主要编程语言的开发公司中,有没有充分的理由限制这种限制?

language-features c#-3.0

22
推荐指数
2
解决办法
1651
查看次数

我现在应该使用C++ 0x功能吗?

随着VS 2010的正式发布,在我的新代码中开始使用部分实现的C++ 0x功能集是否安全?

我现在感兴趣的功能都是由VC++ 2010和最新版本的GCC实现的.这是我必须支持的两个.

就第一句中提到的"安全性"而言:我可以开始使用这些功能(例如,lambda函数),并且仍然可以保证我的代码将在10年内编译成适当符合C++ 0x的编译器.正式发布?

我想我在问VC++ 2010或GCC是否有可能最终像VC++ 6一样; 它是在语言正式标准化之前发布的,因此允许编译严重错误的代码.

毕竟,微软确实说"10是新的6".;)

c++ language-features gcc visual-studio-2010 c++11

22
推荐指数
2
解决办法
2299
查看次数

您最喜欢的语言如何处理深度递归?

我最近开始学习Python,我很惊讶地发现1000深度递归限制(默认情况下).如果你把它设置得足够高,大约30000,就会像C一样崩溃.但是,C似乎要高得多.

(Python人员很快指出,你总是可以将递归函数转换为迭代函数,并且它们总是更快.这是100%正确.但这不是我的问题所在.)

我在Perl中尝试了相同的实验,并且在大约1000万次递归中它消耗了我所有的4个ram并且我使用了^ C来停止尝试.显然,Perl不使用C堆栈,但它在执行时会使用大量的内存 - 考虑到调用函数需要做多少工作,这并不是非常令人震惊.

我在Pike尝试过,并且在大约2秒钟内完成100,000,000次递归完全感到惊讶.我不知道它是如何做到的,但我怀疑它将递归转换为迭代过程 - 它似乎没有消耗任何额外的内存.[注意:Pike确实会使琐碎的案件变得扁平化,但是对于更复杂的案件会发生段错误,或者我被告知.]

我使用了这些无用的功能:

int f(int i, int l) { if(i<l) return f(i+1,l); return i; }

sub f { return f($_[0]+1, $_[1]) if $_[0]<$_[1]; return $_[0] };

def f(i,l):
   if i<l:
     return f(i+1,l)
   return i
Run Code Online (Sandbox Code Playgroud)

我很好奇其他语言(例如,PHP,Ruby,Java,Lua,Ocaml,Haskell)如何处理递归以及它们为何如此处理它.另外,请注意,如果函数是"尾递归"(请参阅​​注释),它是否会有所不同.

language-agnostic recursion language-features language-design

21
推荐指数
2
解决办法
6570
查看次数

空合并赋值运算符?

如果C#允许一个?? =运算符,那将是非常好的.我发现自己经常写下面的内容:

something = something ?? new Something();
Run Code Online (Sandbox Code Playgroud)

我宁愿这样写:

something ??= new Something();
Run Code Online (Sandbox Code Playgroud)

思考?新的语言扩展总是存在争议的本质.

c# language-features operators null-coalescing-operator

21
推荐指数
2
解决办法
5246
查看次数

嵌套空值检查C#的简写

据我所知,没有一个显著写以下更优雅的方式....

string src;
if((ParentContent!= null)
    &&(ParentContent.Image("thumbnail") != null)
    &&(ParentContent.Image("thumbnail").Property("src") != null))
    src = ParentContent.Image("thumbnail").Property("src").Value
Run Code Online (Sandbox Code Playgroud)

你认为应该有一个C#语言功能来缩短它吗?
如果是这样,它应该是什么样的?
例如,像延伸?? 操作者

string src = ParentContent??.Image("thumbnail")??.Property("src")??.Value;
Run Code Online (Sandbox Code Playgroud)

为相当人为的例子和我过度简化的解决方案道歉.

编辑...许多年后
这是一个计划的语言功能,称为" 空传播运算符 " ?. https://roslyn.codeplex.com/discussions/540883(谢谢@Brian)

c# language-features

21
推荐指数
3
解决办法
3987
查看次数

Ruby的method_missing在其他语言中是否有等价物?

在Ruby中,对象有一个方便的方法method_missing,允许人们处理甚至没有(显式)定义的方法的方法调用:

当obj被发送一个它无法处理的消息时,由Ruby调用.symbol是被调用方法的符号,args是传递给它的任何参数.默认情况下,解释器在调用此方法时会引发错误.但是,可以覆盖该方法以提供更多动态行为.下面的示例创建一个类Roman,它响应名称由罗马数字组成的方法,返回相应的整数值.

class Roman
 def romanToInt(str)
   # ...
 end
 def method_missing(methId)
   str = methId.id2name
   romanToInt(str)
 end
end

r = Roman.new
r.iv      #=> 4
r.xxiii   #=> 23
r.mm      #=> 2000
Run Code Online (Sandbox Code Playgroud)

例如,Ruby on Rails使用它来允许调用诸如的方法find_by_my_column_name.

我的问题是,其他语言支持的等价物method_missing,以及如何在代码中实现等效语言?

language-features programming-languages method-missing

21
推荐指数
10
解决办法
3393
查看次数

在循环中执行array.length或list.count是否代价高昂

我知道在JavaScript中,像这样创建一个for循环:for(int i = 0; i < arr.length; i++)因为它每次都计算数组长度,所以代价很高.对于列表和数组,这种行为在c#中是否代价高昂.或者在编译时它是否经过优化?还有其他语言如Java,这是如何处理的?

c# compiler-construction performance language-features

20
推荐指数
2
解决办法
5596
查看次数

命名这个python/ruby​​语言结构(使用数组值来满足函数参数)

这种语言结构叫什么?

在Python中我可以说:

def a(b,c): return b+c
a(*[4,5])
Run Code Online (Sandbox Code Playgroud)

在Ruby中同样得到9.

def a(b,c) b+c end
a(*[4,5])
Run Code Online (Sandbox Code Playgroud)

当一个数组传递给一个需要多个参数的函数时,这叫做什么?

*运营商的名称是什么?

还有哪些语言支持这个很酷的功能?

ruby python syntax language-features

20
推荐指数
3
解决办法
5889
查看次数

F#中这种灵活的"自我标识符"有什么好处?

虽然我理解F#中的自我标识符,但我对这种灵活性的好处感到困惑.为什么F#不仅仅this.Blah像C#一样支持并且完成它?我猜有些人用它来提高可读性,但即便如此,这似乎是一个延伸.那么,这种语言功能的用途/好处是什么?

对于未启动的,下面是一个定义类型范围的自身标识符"self"和方法范围标识符"this"的示例.该示例来自上面链接的MSDN文章.

type MyClass2(dataIn) as self =
   let data = dataIn
   do
       self.PrintMessage()
   member this.PrintMessage() =
       printf "Creating MyClass2 with Data %d" data
Run Code Online (Sandbox Code Playgroud)

f# language-features

20
推荐指数
1
解决办法
933
查看次数

我应该更喜欢C#中的静态方法吗?

花了一些时间学习函数式编程,我想要使用不执行任何变异的静态方法变得越来越自然.

有什么理由可以抑制这种本能吗?

.net c# language-features

19
推荐指数
3
解决办法
1037
查看次数