为什么不语句什么也不做抛出一个异常(或警告开发者)?

我一直咬了好几次通过,似乎是自引用,但是当他们执行的,它们实际上并不做任何事情,因为他们需要在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)假设你添加关键字时,返回值为专项选修课(因此这意味着它通常是强制性的)会导致大量的代码,停止编译或警告的发出万吨

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声明......这......实际上并不做任何事情

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

分类:。净 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.788 (s). 10 q(s)