la inicialización de objetos puede simplificarse

Con mi código me sale 3 mensajes todos diciendo inicialización de objetos se puede simplificar y en mi creciente sed de conocimiento (y mi TOC) Me gustaría "fix" mi código para que estos mensajes no aparecen. Sé que puedo configurarlo para que no aparezcan, pero seguiré pensando que están ahí en segundo plano, lo cual no me parece bien. Si alguien puede indicar cómo "simplificar la inicialización" que sería genial para que pueda mejorar mis habilidades. Si se requiere más código que me haga saber y puedo añadir en.

1st:

TreeNode node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage);//issue on this line
node.Tag = drive;

2nd:

DirectoryInfo di = new DirectoryInfo(dir);
TreeNode node = new TreeNode(di.Name, 0, 1); //this line

Sospecho que con los treenodes es porque les he dado el mismo nombre, pero he intentado cambiar el nombre, pero no hizo ninguna diferencia.

3rd:

OleDbCommand select = new OleDbCommand();//this line
select.Connection = cnDTC;
select.CommandText = string.Format("SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({0})", strSQL2);
Solución

Antes:

TreeNode node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage);
node.Tag = drive;

Después:

var node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage) {
    Tag = drive
};

2nd

Antes:

DirectoryInfo di = new DirectoryInfo(dir);
TreeNode node = new TreeNode(di.Name, 0, 1); //this line

Después:

var node = new TreeNode((new DirectoryInfo(dir)).Name, 0, 1);

3rd

Antes:

OleDbCommand select = new OleDbCommand();//this line
select.Connection = cnDTC;
select.CommandText = string.Format("SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({0})",
      strSQL2);

**Después.

var select = new OleDbCommand(
      String.Format("SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({0})", strSQL2), 
      cnDTC);

3ª (con interpolación de cadenas):

var select = new OleDbCommand($"SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({strSQL2})", 
      cnDTC);

BTW: siempre que aparezca este tipo de mensaje, trate de poner el cursor en esa línea y pulse Ctrl+. (o haga clic en la bombilla que aparece) - que se abre "quick-Fix / quick-refactor";

Leer más sobre var (realmente no es malo 😉) y algo más de documentación sobre Inicializadores de objetos y colecciones

Comentarios (8)

Tuve un problema similar con este código:

        Customer oCust = new Customer();
        oCust.Address = txtAddress.Text;
        oCust.City = txtCity.Text;
        oCust.State = txtState.Text;

Y lo solucioné con este código:

        Customer oCust = new Customer()
        {
           Address = txtAddress.Text,
           City = txtCity.Text,
           State = txtState.Text
        };

Así que...para desactivar el mensaje de advertencia (IDE0017)(en VS 2017/2019):
Haz clic en la pestaña Herramientas. Luego baje a Opciones...
Luego | TextEditor | C# | CodeStyle | General |
En Preferencias de Expressoin cambie Preferir Inicializador de Objetos a No.

Alternativamente puede dejar la Preferencia como y cambiar la Gravedad de Advertencia a Sugerencia. Ahora sólo se mostrará como un mensaje en la Lista de Errores.

Comentarios (1)

El compilador quiere que utilices la siguiente sintaxis:

var select = new OleDbCommand
{
   Connection = cnDTC,
   CommandText = string.Format("SELECT MAX(VERSION_NO) AS MAX_VERSION FROM ({0})", strSQL2)
};

Esto es para su 3er caso.

Comentarios (0)