No se puede hacer ninguna de las soluciones ¡enumerados aquí hasta que tus tipos sean iguales! Si su lista o ICollection o IEnumerable es del tipo string
, por ejemplo, pero su ObservableCollection
necesita ser del tipo Nodes
o Computers
o algo más, ¡primero tiene que obtener la Lista en ese tipo! Perdí tanto tiempo en estas otras "soluciones" falsas y simplificadas que NO son soluciones porque no explican esto ni toman en cuenta este factor.
decir esto es su ObservableCollection
:
public class Computer
{
public string Name { get; set; }
}
bastante estándar, ¿verdad? Probablemente termines reemplazando Computer
con cualquier cantidad de cosas en cualquier cantidad de proyectos.
Si a continuación, obtener una lista de nombres de equipo en un List<string>
llamada lstComputers
, no se puede convertir sólo que usando:
var oc = new ObservableCollection<Computer>(lstComputers);
Dirá sus tipos no coinciden y no se pueden convertir de una a la otra, porque Está tratando de meter un List<string>
en un ObservableCollection<Computer>
. Clavija cuadrada en un agujero redondo.
En cambio, en su función para obtener los nombres de los equipos, hay que añadir a todos ellos "especial similar":
public static List<Computer> NetworkComputers()
{
List<Computer> lstComputers = new List<Computer>();
DirectoryEntry root = new DirectoryEntry("WinNT:");
foreach (DirectoryEntry computers in root.Children)
{
foreach (DirectoryEntry computer in computers.Children)
{
if (computer.Name != "Schema" && computer.SchemaClassName == "Computer")
{
lstComputers.Add(new Computer() { Name = computer.Name });
}
}
}
}
Sólo porque utilizamos esa línea lstComputers.Add(new Computer() { Name = computer.Name });
y devolver la List<Computer>
y no List<string>
puede ahora lo ponemos en nuestro ObservableCollection<Computer>
.
Si se ha perdido el barco y no puede hacerlo de esta manera desde el principio, este tema habla de otras formas en las que podría ser capaz de hacer la conversión: convert a list of objects from one type to another using lambda expression
Así que una vez que lo tienes en un List<Computer>
, solo entonces usted puede hacer:
List<Computer> lstComputers = NetworkComputers();
var oc = new ObservableCollection<Computer>(lstComputers);
¿Por qué no hacerlos 'ObservableCollection
@Rachel Correct. El primer lugar es RIA Services. No sé si es posible hacerlo ... – Terminador