Это потому, что раздел 8.5.1 спецификации языка C #.состояния:
Кроме того, инициализатор переменной в объявлении локальной переменной точно соответствует оператору присваивания, который вставляется сразу после объявления.
Это в основном означает, что когдавы делаете:
StringBuilder sb = new StringBuilder("test")
По сути, вы делаете то же самое, что и:
StringBuilder sb; sb = new StringBuilder("test")
Таким образом, для вашего чека против * больше нет возвращаемого значения1013 *, поскольку присваивание не является одним выражением, а выражением, которое является декларатором локальной переменной , состоящим из идентификатора , за которым следует выражение .
Спецификация языка дает этот пример, утверждая, что это:
void F() {
int x = 1, y, z = x * 2;
}
В точности эквивалентно:
void F() {
int x; x = 1;
int y;
int z; z = x * 2;
}