Q:

Операторы Lua в C# операторы (необычное сравнение)

Никак не могу понять как перевести этот оператор из Lua в C# оператор?
--Это некая карта из массива байт
--0x0 используется как ничего, а 0x1 как стена
local map = {
{ 0x1, 0x1, 0x1, 0x1 },
{ 0x1, nil, nil, 0x1 },
{ 0x1, nil, 0x1, 0x1 },
{ 0x1, 0x1, 0x1, 0x1 },
}

local yMap, xMap = math.floor(player.y / 32), math.floor(player.x / 32)

if map[yMap] and map[yMap][xMap] then
    return map[yMap][xMap]
end

Ну к сути - Я никак не понимаю как это вообще работает в Lua?
Я про строчку с сравнением: if map[yMap] and map[yMap][xMap] then
Я пытался понять и написать это на C#
if ((map[yMap] != 0x0) & (map[yMap][xMap] != 0x0))

Но все тщетно, компилятор конечно же ругается что я сравниваю byte[] и byte.
Никак не пойму почему на Lua это работает?! Может он берет байт от начала массива?
И да, как я правильно понял:
if map[0] then и if map[0] not nil then это одно и тоже?
То есть Если НЕ nil вернет true?
-
В Lua почти ничего не знаю, просто нужно Lua скрипт в C# перенести, пожалуйста, объясните глупцу, как это работает?

A:

if map[yMap] - да это тоже самое что спросить map[yMap]  существует?
В строго типизированных языках двумерный массив определен заранее, как у вас. И эту проверку можно опустить. 
      public struct Coord    { public int x, y;  }      

           Coord player;        
        player.y = 3992;
        player.x = 62;

        int[,] map = {
            { 0x1, 0x1, 0x1, 0x1 },
            { 0x1, 0x0 , 0x0, 0x1 },
            { 0x1, 0x0 , 0x1, 0x1 },
            { 0x1, 0x1, 0x1, 0x1 },
            { 0x1, 0x1, 0x1, 0x1 }, 
        } ;

        int xMap = (int)Math.Floor( (double) player.x / 32);
        int yMap = (int)Math.Floor( (double) player.y / 32);

        Console.WriteLine(  );

        if (xMap<=map.GetLength(1) & yMap<=map.GetLength(0))  
            if  (map[yMap,xMap] == 0x0) 
              { Console.WriteLine("Ok"); }
            else  Console.WriteLine("None");
        else  Console.WriteLine("Bad index"); 
    }

Но если есть необходимость делать проверку, то как-то так:
(map.GetType().IsArray) && (map.Rank==2)

