2010-08-04 31 views
13

Đôi khi tôi muốn biết lý do của một số thay đổi API nhất định. Vì Google đã không giúp tôi với câu hỏi này, có thể StackOverflow có thể. Tại sao Microsoft chọn loại bỏ phương thức trợ giúp GetAttribute trên các phần tử XML? Trong thế giới System.Xml, có XmlElement.GetAttribute("x") như getAttribute trong MSXML trước đó, cả hai đều trả về giá trị thuộc tính hoặc chuỗi rỗng khi thiếu. Với XElementSetAttributeValue nhưng GetAttributeValue không được triển khai. Chắc chắn nó không phải là quá nhiều công việc để sửa đổi logic để kiểm tra và sử dụng các tài sản XElement.Attribute("x").Value nhưng nó không phải là thuận tiện và cung cấp các chức năng tiện ích một cách (SetAttributeValue) nhưng không khác có vẻ lạ. Có ai ngoài kia biết lý do đằng sau quyết định để tôi có thể nghỉ ngơi dễ dàng và có thể học được điều gì đó từ nó?Tại sao XElement không có phương thức GetAttributeValue?

Trả lời

15

Bạn có nghĩa vụ phải được gán giá trị như thế này:

var value = (TYPE) element.Attribute("x"); 

UPDATE:

Ví dụ:

var value = (string) element.Attribute("x"); 
var value = (int) element.Attribute("x"); 

vv

Xem bài viết này: http://www.hanselman.com/blog/ImprovingLINQCodeSmellWithExplicitAndImplicitConversionOperators.aspx. Cùng một điều làm việc cho các thuộc tính.

+0

Trả về một thể hiện của XAttribute. Không có ý tưởng làm thế nào đúc nó vào System.Type là có ích. –

+0

Không để System.Type lol, bất cứ loại nào bạn cần nó được. Tôi sẽ cập nhật câu trả lời của mình. – Necros

+1

Tốt, không biết về loại chuyển đổi trên các lớp đó. Cảm ơn! –

5

Không chắc chắn chính xác lý do, nhưng với phương pháp mở rộng C#, bạn có thể tự khắc phục sự cố.

public static string GetAttributeValue(this XElement element, XName name) 
{ 
    var attribute = element.Attribute(name); 
    return attribute != null ? attribute.Value : null; 
} 

phép:

element.GetAttributeValue("myAttributeName"); 
+4

Tôi thường kết thúc thực hiện chức năng này và chắc chắn đây là cách tiếp cận tốt nhất IMO nhưng tôi quan tâm đến * tại sao * GetAttribute bị thiếu trong API khi nó ở đó trong các mô hình trước đó và cung cấp trợ giúp cho setter –

Các vấn đề liên quan