2010-01-12 35 views
5

Tôi có một bộ sưu tập ProductSearchResults, bên dưới phương pháp dự định tìm một sản phẩm cụ thể trong bộ sưu tập đó và cập nhật nó. Tôi sẽ cập nhật đối tượng trỏ đến phần tử của bộ sưu tập thay vì phần tử thực mà nó tự mặc dù (tôi nghĩ)Làm cách nào để cập nhật phần tử trong bộ sưu tập thay vì tham chiếu

Bạn có thể vui lòng chỉ cho tôi cách thực hiện đúng cách để tôi cập nhật sản phẩm thực tế trong bộ sưu tập

Cảm ơn

public void UpdateProductInfo(ProductInfo product) 
    { 
     var productToUpdate = this.ProductSearchResults.Where(p => p.ID == product.ID).; 

     if (productUpdate.Count() > 0) 
     { 
      var toUpdate = productToUpdate.First<ProductInfo>(); 

      toUpdate = product; 
     } 
    } 

Trả lời

14

trong thực tế tất cả các bạn đang làm là thay đổi tham chiếu đến biến địa phương toUpdate để trỏ tại thông qua trong lập luận product.

Cho phép hãy bước về phía sau, khi bạn làm:

var toUpdate = productToUpdate.First<ProductInfo>(); 

bạn có một tài liệu tham khảo đến một mục từ bộ sưu tập của bạn (ProductSearchResults). Bây giờ bạn có thể vui lòng cập nhật các thuộc tính của nó, ala:

toUpdate.ProductName = product.ProductName; 
toUpdate.Price = product.Price; 
//etc.. 

tuy nhiên, bạn không thể cập nhật mục trong bộ sưu tập để trỏ đến một mục khác/mới theo cách bạn đang cố gắng. Bạn có thể xóa nó khỏi bộ sưu tập và thêm số mới của bạn nếu đó thực sự là những gì bạn yêu cầu:

public void UpdateProductInfo(ProductInfo product) 
    { 
     var productToUpdate = this.ProductSearchResults.Where(p => p.ID == product.ID).; 

     if (productUpdate.Count() > 0) 
     { 
      var toUpdate = productToUpdate.First<ProductInfo>(); 

      this.ProductSearchResults.Remove(toUpdate); 
      this.ProductSearchResults.Add(product); 
     } 
    } 

Hy vọng điều đó sẽ hữu ích.

+2

Nơi sẽ trả về một IEnumerable không có phương thức Thêm hoặc Xóa. Tạo một Danh sách từ danh sách sẽ tạo danh sách mới để danh sách không hoạt động. Nếu ProductSearchResults là một Danh sách , bạn có thể sử dụng Tìm và sau đó Xóa và Thêm. –

2
var productToUpdate = this.ProductSearchResults.FirstOrDefault(p => p.ID == product.ID); 

if (productUpdate != null) 
{ 
    productUpdate.Property = product.Property; 
    ...continue for other properties 
} 
0

Trong C#, viết variable = expression; gán giá trị mới cho biến. Nó không ảnh hưởng đến giá trị đã được tham chiếu trước đó bởi biến đó.

Trong ví dụ của bạn, bạn có một giá trị gọi là product, mà là một ProductInfo được cung cấp bởi người gọi, và một giá trị mà bạn nhận được từ danh sách của bạn, mà bạn lưu trữ trong toUpdate, mà bạn muốn cập nhật. Điều này sẽ liên quan đến việc gọi các hàm thành viên (hoặc gán cho các thuộc tính) của toUpdate dựa trên các giá trị trong product.

Tuy nhiên, tôi nghi ngờ bạn thực sự muốn cập nhật thông tin sản phẩm của sản phẩm được tìm thấy trong cơ sở dữ liệu hoặc loại lưu trữ khác được truy cập bởi ProductSearchResults. Công cụ lưu trữ bạn sử dụng (hoặc lớp truy cập dữ liệu) có thể cung cấp cho bạn chức năng để lưu số ProductInfo được liên kết với một số nhận dạng nhất định, vì vậy tất cả những gì bạn cần làm là gọi hàm đó.

0

Bạn có muốn thay thế sản phẩm trong bộ sưu tập hoặc cập nhật một số thuộc tính trên đó không? Giả sử sau, đây là một ví dụ:

public void UpdateProductInfo(ProductInfo product) 
{ 
    var productToUpdate = this.ProductSearchResults.FirstOrDefault(p => p.ID == product.ID).; 
    if (productToUpdate == null) 
    { 
     // throw exception? 
    } 
    else 
    { 
     productToUpdate.Price = productInfo.Price; // for example 
    } 
} 
Các vấn đề liên quan