Bạn không thể làm bất kỳ trong những giải pháp được liệt kê ở đây cho đến khi các loại của bạn giống nhau! Ví dụ: nếu danh sách hoặc ICollection hoặc IEnumerable của bạn thuộc loại string
, nhưng ObservableCollection
cần phải thuộc loại Nodes
hoặc Computers
hoặc thứ gì đó khác, trước tiên bạn phải đưa Danh sách vào loại đó! Tôi lãng phí quá nhiều thời gian vào những giả mạo khác, "giải pháp" đơn giản không phải là giải pháp bởi vì họ không giải thích điều này hoặc đưa yếu tố này vào tài khoản.
nói đây là ObservableCollection
của bạn:
public class Computer
{
public string Name { get; set; }
}
Khá chuẩn, phải không? Có thể bạn sẽ phải thay thế Computer
bằng bất kỳ số thứ nào trong bất kỳ số dự án nào.
Nếu bạn sau đó nhận được một danh sách các tên máy tính trong một List<string>
gọi lstComputers
, bạn không thể chỉ chuyển đổi mà sử dụng:
var oc = new ObservableCollection<Computer>(lstComputers);
Nó sẽ nói loại của bạn là không phù hợp và không thể được chuyển đổi từ một đến khác vì bạn đang cố gắng đẩy một số List<string>
vào một số ObservableCollection<Computer>
. Hình vuông trong một lỗ tròn.
Thay vào đó, chức năng của bạn để nhận được tên máy tính, bạn phải thêm tất cả "đặc biệt giống như":
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 });
}
}
}
}
Chỉ vì chúng tôi sử dụng dòng lstComputers.Add(new Computer() { Name = computer.Name });
và được trả lại List<Computer>
và không List<string>
thể bây giờ chúng tôi đặt nó vào số ObservableCollection<Computer>
.
Nếu bạn bị mất thuyền và không thể làm điều đó như thế này ngay từ đầu, chủ đề này nói về những cách khác bạn có thể có thể làm chuyển đổi của bạn: convert a list of objects from one type to another using lambda expression
Vì vậy, một khi bạn có nó trong một List<Computer>
, chỉ khi đó bạn mới có thể thực hiện:
List<Computer> lstComputers = NetworkComputers();
var oc = new ObservableCollection<Computer>(lstComputers);
Tại sao không chỉ đặt chúng là 'ObservableCollection
@Rachel Correct. Địa điểm đầu tiên là RIA Services. Tôi không biết nếu nó có thể làm điều đó ... – Terminador