Hola amigos: 
Yo soy nueva en el foro y los necesito con suma urgencia pues este código me tiene loca y me gustaría si me pudieran decir dónde encuentro el error, o el error.
Al depurar me sale codigo inalcanzable y se requiere una referencia a objeto no estático y que no todas las rutas me arrojan un valor.  Estoy cansada de darle vueltas. A ver si por caridad alguno me  hecha una manito. Graicas.
Ahí va el código para crear sudoku
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
ConsoleApplication1
{
    class Sudoku
    {
        bool verificadacolumna;
        int i, j;//declara e inicializa la matriz 
        int p;//declara e inicializa matriz auxiliar de núemros aleatorios 
        int[,] matriz = new int[9, 9];
        int[] aux = new int[30];//utilizo esta matriz unidiemnsional de 30 celdas 30 el número de celdas que debo llenar en el sudoku 
        Random r = new Random();
        //creemos un nuevo array para organizar las regiones 
        //Declaración del array 
        int m; //variable de filas para la nueva matriz límitesRegiones 
        int n;// variable para columnas de matriz límitesREgiones 
        int inicioFila;
        bool verificadaregion;
        //instanciación ó creación del nuevo "new" objeto del array 9 filas 2 columnas 
        int[,] limitesRegiones = { { 0, 0 }, { 0, 3 }, { 0, 6 }, { 3, 0 }, { 3, 3 }, { 3, 6 }, { 6, 0 }, { 6, 3 }, { 6, 6 } };//inicialización del array 
        // debe haber quedado un arreglo de 9 filas y dos columnas donde se ubican 
        //los valores de inicio de la primera celda para cada una de las nueve regiones 
        //miremos cómo se vería en consola 
        int NumeroRegion;
        int numeroPrueba;
        //podríamnos hacer que genere cualquiera todo y luego revice si cumple condiciones sisi imprime si no generar otro problema tiempo 
        //lo mejor seria que cada número sea analizado antes para asignarlo 
        //un número cualquiera entero 
        //entre 1 y 9 para probar si sirve en esa posición 
        //Ahora vamos 
        //a verificar si ese número sirve en esa posición y que no 
        //repetido en la región 
        //======================================================================================================================================== 
        //Método para codificar las regiones del sudoku 
        //Entrada: vacío 
        //salida: num_secreto 
        //Notas: codifica las 9 regiones
        public int CodificarRegiones(int i, int j)
        {
            if (i >= 0 && i <= 2)
            {
                if (j >= 0 && j <= 2)
                {
                    return 1;
                }
            }
            if (i >= 0 && i <= 2)
            {
                if (j >= 3 && j <= 5)
                {
                    return 2;
                }
            }
            if (i >= 0 && i <= 2)
            {
                if (j >= 6 && j <= 8)
                {
                    return 3;
                }
            }
            if (i >= 3 && i <= 5)
            {
                if (j >= 0 && j <= 2)
                {
                    return 4;
                }
            }
            if (i >= 3 && i <= 5)
            {
                if (j >= 3 && j <= 5)
                {
                    return 5;
                }
            }
            if (i >= 3 && i <= 5)
            {
                if (j >= 6 && j <= 8)
                {
                    return 6;
                }
            }
            if (i >= 6 && i <= 8)
            {
                if (j >= 0 && j <= 2)
                {
                    return 7;
                }
            }
            if (i >= 6 && i <= 8)
            {
                if (j >= 3 && j <= 5)
                {
                    return 8;
                }
            }
            if (i >= 6 && i <= 8)
            {
                if (j >= 6 && j <= 8)
                {
                    return 9;
                }
                return 10;
            }
            return 10;
        }
        //======================================================================================================================================== 
        //empecemos en orden a crear los métodos para verificar los números 
        //Método para crear un número aleatorio 
        //Entrada: vacío 
        //salida: num_secreto 
        //Notas: crea números aleatorios r entre 1 y 9 
        public int NumerosAleatorios() //debe ser static para que no sea necesario crear objetos para usarla, int para que sea entero el número creado 
        {
            Random r = new Random();
            return r.Next(1, 10);
        }
        //======================================================================================================================================== 
        //Método para verificar que un número aleatorio pertenece a una región determinada 
        //Entrada: numeroPrueba 
        //salida: bool 
        //Notas: no se permiten números repetidos en la misma región 
        public bool VerificarRegion(int numeroPrueba, int i, int j, int NumeroRegion) //si fuera public vouid, se usa para escribir mensajes en la consola
        {
            switch (NumeroRegion)
            {
                case 1:
                    for (i = 0; i < 3; i++)
                        for (j = 0; j < 3; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                               
                            }
                    else return true;
                    break;
                case 2:
                    for (i = 0; i < 3; i++)
                        for (j = 3; j < 6; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                                
                            }
                    else return true;
                    break;
                case 3:
                    for (i = 0; i < 3; i++)
                        for (j = 6; j < 9; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                                
                            }
                    else return true;
                    break;
                case 4:
                    for (i = 3; i < 6; i++)
                        for (j = 0; j < 3; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                                
                            }
                    else return true;
                    break;
                case 5:
                    for (i = 3; i < 6; i++)
                        for (j = 3; j < 6; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                            }
                            else return true;
                    break;
                case 6:
                    for (i = 3; i < 6; i++)
                        for (j = 6; j < 9; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                            }
                            else return true;
                    break;
                case 7:
                    for (i = 6; i < 9; i++)
                        for (j = 0; j < 3; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                            }
                            else return true;
                    break;
                case 8:
                    for (i = 6; i < 9; i++)
                        for (j = 3; j < 6; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                            }
                            else return true;
                    break;
                case 9:
                    for (i = 6; i < 9; i++)
                        for (j = 6; j < 9; j++)
                            if (numeroPrueba == matriz[i, j])
                            {
                                return false;
                            }
                            else return true;
                    break;
                
                 
                default:
                    return false;
                
            }
        }
        //======================================================================================================================================== 
        //Método para verificar que un número aleatorio pertenece a una fila determinada 
        //Entrada: numeroPrueba 
        //salida: bool 
        //Notas: no se permiten números repetidos en la misma fila. El conjunto de la intersección entre los elementos que pertenecen 
        //a la fila y el conjunto unitario de número aleatorio deber ser vacío para continuar. Lo que se hace aquí 
        //es que empezamos con j=0, es decir columna 0, mientras esta sea menor que 9 vamos incrementando y probando si el 
        //numPrueba es igual a lo que hay dentro de la matriz en la posición i,j. Si si la variable verificafila sale falso 
        //Los tres tipos de verificación deben ser verdaderos para que el número se pueda asignar a esa celda de la matriz 
        public bool VerificarFila(int numeroPrueba, int i, int j)
        {
            {
                for (j = 0; j < 9; j++)
                {
                    if (numeroPrueba == matriz[i, j])
                        return false;
                    else return true;
               
                }
            }
        }
        //======================================================================================================================================== 
        //Método para verificar que un número aleatorio pertenece a una columna determinada 
        //Entrada: numeroPrueba 
        //salida: bool 
        //Notas: no se permiten números repetidos en la misma columna 
        public bool VerificarColumna(int numeroPrueba, int i , int j)
        {
            {
                for (i = 0; i < 9; i++)
                {
                    if (numeroPrueba == matriz[i, j])
                        return false;
                    return true;
                    break;
                }
            }
        }
        //====================================================================================================================================== 
        //Método para asignar el número probado a la posición ij 
        //Entrada: 
        //Salida: matriz? 
        //Notas: se genera matriz 9x9, se selecciona una celda al azar 
        public bool AsignacionNumero(int numeroPrueba, int i, int j)
        {
            if (Sudoku.VerificarRegion(numeroPrueba, i, j, NumeroRegion) && (Sudoku.VerificarFila(numeroPrueba, i, j)) && ( Sudoku.VerificarColumna( numeroPrueba, i, j)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        //====================================================================================================================================== 
        //Método para crear la matriz y visualizarla en consola 
        //Entrada: 
        //Salida: matriz? 
        //Notas: se genera matriz 9x9, se selecciona una celda al azar 
    }
    //====================================================================================
    //====================================================================================
    class SudokuApp
    {
        static void main()
        {
            Sudoku sudo = new Sudoku();
            int i, j;//declara e inicializa la matriz 
            int[,] matriz = new int[9, 9];
            int numeroPrueba;
            int z;
            bool prueba;
            //creemos un nuevo array para organizar las regiones 
            //Declaración del array 
            //instanciación ó creación del nuevo "new" objeto del array 9 filas 2 columnas 
            // debe haber quedado un arreglo de 9 filas y dos columnas donde se ubican 
            //los valores de inicio de la primera celda para cada una de las nueve regiones 
            //miremos cómo se vería en consola 
            for (z = 0; z < 91; z++)//este es un contador hasta 91 números para llenar el sudoku
            {
                i = sudo.NumerosAleatorios() - 1;
                //esto para grantizar números desde 0 hasta 8 
                j = sudo.NumerosAleatorios() - 1;
                //aquí es totalmente azar 
                //condición de simetría 
                /*aquí hay que establecer una condición especial porque si 
                i ó j pertenecen al conjunto 3 4 5, existe probablidad de
                * repetirse el número por lo que es mejor empezar a probar 
                * desde aquí.*/
                //establezcamos aquí la prueba para cada número si sí se asigna si no se devuelve y prueba con otros 
                //definitivamente voy a crear una matriz donde se guarden los números aleatorios para poder 
                //apuntarlos y variar la posicion si no sirven 
                do //aquí hacemos las pruebas necesarias para que el número sea el correcto
                {
                    numeroPrueba = sudo.NumerosAleatorios();
                    prueba = sudo.AsignacionNumero(numeroPrueba, i, j);
                }
                while (prueba == false);
                matriz[i, j] = numeroPrueba;
                do
                {
                    numeroPrueba = sudo.NumerosAleatorios();
                    prueba = sudo.AsignacionNumero(numeroPrueba, 8 - i, 8 - j);//condicion de simetría
                }
                while (prueba == false);
                matriz[8 - i, 8 - j] = numeroPrueba;
                //Espero que los tres números aleatorios sean diferentes.  Toca probar...
                // matriz[8 - i, 8 - j] ;
            }
            for (i = 0; i < 9; i++)//bucle for anidado forfor para leer toda la matriz 
            {
                for (j = 0; j < 9; j++) Console.Write("{0,3}", matriz[i, j]);
                Console.WriteLine();
            }
            string a = Console.ReadLine();
        }
        //======================================================================================================================================= 
        //cierre del método Main, que es el que utiliza los difernetes métodos de la clase SudokuApp 
        //======================================================================================================================================= 
    }
    //cierre de la clase SudokuApp 
}
//Cierre de namespace