我已经通过,似乎是自我参照,但它们在执行时,它们实际上并不做任何事情VB.NET(如果在C#中存在这样的效果不知道)语句咬伤几次因为它们需要目标和一个没有提供。例如:

Dim MyString as string = "String to test"

' Neither of these lines do anything '
MyString.Replace(" ", "-")
MyString.Substring(0,5)

' This will return the original string, because neither statement did anything '
Messagebox.Show(MyString)

在这两种情况下,它似乎并不理会该语句需要一个目标来分配结果到.NET,我不给它一个。是否有一个原因,IDE /编译器不提醒我的这种效果,或者说异常“StatementDoesntDoAnything”不是抛出?由于在这样一种方式,它不会改变任何东西形成的代码,它显然是打错。

有帮助吗?

解决方案

它可以是很难说,忽略返回值不旨在作为一些功能做一些副作用和返回值。

这“仅仅是”返回值将具备的功能被标记为这样可以让编译器检查它们,而只是一直没有一个优先级或判断有投资(显然足够的回报,否则他们会做了它:)

其他提示

是的,这将是巨大的,如果它们没有什么副作用的方法,可以用某种标记[NoSideEffectsAttribute()]让喜欢的编译器工具,可以提醒你,但目前没有这样的事情是在我的面前。

但你可以尝试的FxCop,它可以在.NET程序集看到许多微妙的编程错误。

有许多情况下,方法返回任选由程序员处理值。有没有办法让编译器知道这个特定的方法不起作用。它可能有一个副作用,那你选择做什么用方法的返回值的事实是你一个Concious酒店决定。

如果编译器选择要提醒你每个实例,这个事情,那么你会得到太多的假警告。的

它往往是困难的编译器,以确定该函数“做什么”。除非编译器严格的过程间分析(IPA),它不能确定功能呼叫具有副作用。

IPA是一个缓慢的过程,以便在默认情况下大多数编译器不执行此该显著增加了编译器存储器的要求。

这是C,C ++,这是继承的行为,并orioginally这样做,你可以选择是否从一个函数/方法使用返回值...当你写一个函数/方法,做了一堆东西然后返回一定的价值,当你调用它,你必须写的选项

variableName = functionName([parameterlist]);  

如果你想的东西用returnb值,或只是

functionName([parameterlist]);  

如果你不这样做。

对于没有副作用的功能的方法(比如你提到的那些),正如你指出,这并不完全是有意义的,但改变它新的语言将有悖于符合许多许多其他语言的悠久历史这个标准...

我不知道具有强制或不返回值另一个关键字被放入一个变量将是各种原因

是个好主意

1)假设你添加关键字时,返回值是optinal(因此这意味着它通常是强制性的)会导致大量的代码停止编译或警告的发出吨

2)假设你做相反,添加关键字时,返回值是被迫的,有些人会简单地使用虚拟变量来存储它们,并继续使用它疗法使用的方式。

3)我不觉得很多人居然会采取深思的返回值是否是可选的,或者没有时间。在某些情况下,我得承认它给了,但并非总是如此。

考虑方法Dictionary<TKey, TValue>.TryGetValue(TKey key, out TValue value):它检查是否关键是在字典中,并且如果是,则它把值插入out参数。返回值是指示操作是否成功一个bool。有时你关心;有时你不知道。我认为这是对这样的方法相当接受的方法;如果编译器迫使你指定的返回值的变量,人们就会有很多这样的代码:

int someValue = 0;
bool discard = IntDictionary.TryGetValue("key", out someValue);

// I don't even care if discard is true or false;
// someValue will be 0 if it wasn't in IntDictionary
  

我已经被

咬伤几次

跳跃到的结论,而不是由

  

在VB.NET语句......那......实际上并不做任何事情。

但实际上是非常有据可查的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top