相关疑难解决方法(0)

为什么"abcd".StartsWith("")返回true?

标题是整个问题.有人能告诉我为什么会这样吗?

c# java startswith

83
推荐指数
8
解决办法
2万
查看次数

为什么IQueryable.All()在空集合上返回true?

所以我遇到了今天的情况,其中一些生产代码正在失败,因为一个方法完全按照MSDN中的说明执行.因为没有阅读文档而感到羞耻.然而,我仍然在摸索为什么它会以这种方式行事,即使是"按设计",因为这种行为正好与我预期的(和其他已知行为)相反,因此似乎违反了原则最不惊讶的.

All()方法允许您提供谓词(例如lambda表达式)来测试IQueryable,返回一个布尔值,指示所有集合成员是否与测试匹配.到现在为止还挺好.这就是它变得奇怪的地方. 如果集合为空,All()也会返回true.由于以下原因,这似乎完全落后于我:

  • 如果集合为空,那么这样的测试充其量是未定义的.如果我的车道是空的,我不能断言停在那里的所有车都是红色的.有了这种行为,在空车道上停放的所有车辆都是红色和蓝色和棋盘 - 所有这些表达式都将返回true.
  • 对于熟悉SQL概念的人来说,NULL!= NULL,这是意外的行为.
  • Any()方法按预期行为,并且(正确)返回false,因为它没有任何与谓词匹配的成员.

所以我的问题是,为什么All()这样做?它解决了什么问题?这是否违反了最不惊讶的原则?

我将此问题标记为.NET 3.5,但该行为也适用于.NET 4.0.

编辑 好的,所以我掌握了这个逻辑方面,正如杰森和你们其他人所做的那样.不可否认,空集合是一种边缘情况.我想我的问题根植于斗争,只是因为某些东西是合乎逻辑的并不意味着如果你没有处于正确的思维框架中,它必然是有道理的.

.net linq logic

48
推荐指数
4
解决办法
5218
查看次数

Java int division令我困惑

我正在做非常简单的int划分,我得到奇怪的结果.

此代码2按预期打印:

public static void main(String[] args) {
    int i = 200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}
Run Code Online (Sandbox Code Playgroud)

此代码打印1期望:

public static void main(String[] args) {
    int i = 0200;
    int hundNum = i / 100;
    System.out.println(hundNum);
}
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

(Windows XP Pro,在Eclipse 3.4.1中运行的Java 1.6)

java int division octal

10
推荐指数
2
解决办法
1874
查看次数

当它应该在C#/ Java中返回-1时,IndexOf方法返回0

我的一个朋友带着这种我无法解释的奇怪行为来找我,任何洞察力的观点都会受到赞赏.

我正在运行VS 2005(C#2.0),以下代码显示了该行为

int rr = "test".IndexOf("");
Console.WriteLine(rr.ToString());
Run Code Online (Sandbox Code Playgroud)

上面的代码,打印"0",清楚地表明它应该返回-1

这也发生在Java中,下面的Class显示了这种行为:

public class Test{
 public static void main(String[] args){
   System.out.println("Result->"+("test".indexOf("")));
 }
}
Run Code Online (Sandbox Code Playgroud)

我正在运行Java 1.6.0_17

c# java string logic indexof

7
推荐指数
4
解决办法
7286
查看次数

Java中的startsWith()方法在空String上返回true.怎么样?

可能重复:
为什么"abcd".StartsWith("")返回true?

以下简单的Java代码只使用该startsWith()方法.

package startwithdemo;

final public class Main
{    
    public static void main(String[] args)
    {
        System.out.println("My String".startsWith("M"));
        System.out.println("My String".startsWith("My"));
        System.out.println("My String".startsWith(""));
    }
}
Run Code Online (Sandbox Code Playgroud)

它显示true在所有情况下.前两种情况很明显,但在最后一种情况下(使用空字符串),它正在返回true.怎么样?

java

3
推荐指数
1
解决办法
4775
查看次数

标签 统计

java ×4

c# ×2

logic ×2

.net ×1

division ×1

indexof ×1

int ×1

linq ×1

octal ×1

startswith ×1

string ×1