Syntax error in final key

Asked

Viewed 51 times

1

In my code are appearing the following errors:

Error 1 } expected**

Error 2 Type or namespace Definition, or end-of-file expected**

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TesteVO;
using System.Data;
using TesteBancoDeDados;
using System.Reflection;

namespace TesteNegocio
{
public class NgcCliente
{
    public NgcCliente()
    {


    }

    public List <VoCliente> ConsutaCliente()
    {
        DataTable tabela = BDOracleCliente.ConsultaCliente();

        /*
        List<VoCliente> teste = tabela.AsEnumerable().Select(m => new VoCliente()
        {
            Codigo = m.Field<string>("Codigo"),
            Nome = m.Field<string>("Nome"),
            Endereco = m.Field<string>("Endereco"),
            Cidade = m.Field<string>("Cidade"),
            RG = m.Field<string>("RG"),
            CPF = m.Field<string>("CPF"),
            DataDeContrato = m.Field<DateTime>("DataDeContrato"),
            ValorMensalidade = m.Field<decimal>("ValorMensalidade"),
            Cancelado = m.Field<bool>("Cancelado")
        }).ToList();
        */

        public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()
        {
            var dataList = new List<TSource>();

            const BindingFlags flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic;
            var objFieldNames = (from PropertyInfo aProp in typeof(TSource).GetProperties(flags)
                                    select new { Name = aProp.Name, 
                                    Type = Nullable.GetUnderlyingType(aProp.PropertyType) ?? 
                            aProp.PropertyType }).ToList();
            var dataTblFieldNames = (from DataColumn aHeader in dataTable.Columns
                                        select new { Name = aHeader.ColumnName, 
                        Type = aHeader.DataType }).ToList();
            var commonFields = objFieldNames.Intersect(dataTblFieldNames).ToList();

            foreach (DataRow dataRow in dataTable.AsEnumerable().ToList())
            {
                var aTSource = new TSource();
                foreach (var aField in commonFields)
                {
                    PropertyInfo propertyInfos = aTSource.GetType().GetProperty(aField.Name);
                    var value = (dataRow[aField.Name] == DBNull.Value) ? 
                    null : dataRow[aField.Name]; //if database field is nullable
                    propertyInfos.SetValue(aTSource, value, null);
                }
                dataList.Add(aTSource);
            }
            return dataList;
        } 

        List<VoCliente> teste = tabela.ToList<VoCliente>();

        //return teste; 
    }
}
}

1 answer

2


This method is within another method, if you take it out and leave it at the class level it should solve:

public static List<TSource> ToList<TSource>(this DataTable dataTable) where TSource : new()

I put in the Github for future reference.

It’s to get the whole body out.

One method cannot be inside another, even more public. In C# 7 it is possible to have a local function within a method, but it is deprived of the method.

By the style of the code is likely to have other problems, even typing.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.