Как работает правило области объявления в c#?
https://docs.microsoft.com/en-us/dotnet/csharp/lan...

The lifetime of a local variable is the portion of program execution during which storage is guaranteed to be reserved for it. This lifetime extends at least from entry into the block, for_statement, switch_statement, using_statement, foreach_statement, or specific_catch_clause with which it is associated, until execution of that block, for_statement, switch_statement, using_statement, foreach_statement, or specific_catch_clause ends in any way. (Entering an enclosed block or calling a method suspends, but does not end, execution of the current block, for_statement, switch_statement, using_statement, foreach_statement, or specific_catch_clause.) If the local variable is captured by an anonymous function (Captured outer variables), its lifetime extends at least until the delegate or expression tree created from the anonymous function, along with any other objects that come to reference the captured variable, are eligible for garbage collection.

Судя по всему компилятор рассматривает просто области видимости, вне зависимости от положения переменной в блоке. Кажется что тут нет простого ответа и надо лезть в код компилятора, либо просто смириться со спецификацией
Смысл в том, что мы объявляем (и иногда сразу инициализируем) переменную один раз и используем в текущем и вложенных блоках.
static void Main(string[] args)
        {
            int some = 400;
            int ansome;
            if (some > 100) 
            {
                ansome = some - 100;
                Console.WriteLine(ansome);
            }
                ansome = 10000;
                Console.WriteLine(ansome);
        }