Đô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 XElement
có SetAttributeValue
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?
13
A
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.
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
- 1. Tại sao StringBuilder không có phương thức IndexOf?
- 2. Tại sao AlertDialog.Builder không có phương thức setOnDismissListener hoặc setOnShowListener?
- 3. Tại sao NSArray không có phương thức firstObject?
- 4. Tại sao ngôn ngữ Python không có phương thức writeln()?
- 5. Tại sao ObservableCollection không có phương thức RemoveAll?
- 6. Tại sao Magento có các phương thức _construct và __construct?
- 7. Tại sao C# HashSets có một phương thức Distinct()
- 8. Tại sao có phương thức equals riêng cho các bộ?
- 9. Tại sao có thể gọi phương thức trên phương thức giao diện Java? [So sánh]
- 10. Tại sao phải có phương thức ClassInitialize là tĩnh?
- 11. Tại sao loại chuỗi có phương thức .ToString()?
- 12. Tại sao có một trình lặp phương thức() trên java.util.Collection
- 13. Phương thức Arduino map() - tại sao?
- 14. Các tham số Boolean trong phương thức. Tại sao không?
- 15. Tại sao phương thức TaskFactory.StartNew không phải là chung?
- 16. Tại sao jQuery không cung cấp phương thức .firstChild?
- 17. Tại sao phương thức chain() Underscore.js không phải là lười?
- 18. Android: Tại sao phương thức onClick không hoạt động?
- 19. Tại sao quá tải phương thức không hoạt động bên trong phương thức khác?
- 20. Có thể thêm phương thức vào một lớp EXISTING khi chạy không? tại sao hay tại sao không?
- 21. Tại sao phương thức tĩnh Tạo tồn tại?
- 22. C#: Tại sao LinkedList không có một phương thức RemoveAll có một biến vị ngữ?
- 23. Tại sao các lớp tĩnh không có các phương thức và biến không tĩnh?
- 24. tại sao không có phương thức Center() cho lớp Rectangle trong C#?
- 25. Python: Tại sao Danh sách không có phương thức tìm kiếm?
- 26. tại sao đặt ẩn của MBProgressHUD thành CÓ, nhưng phương thức isHidden là KHÔNG?
- 27. Tại sao IList <T> không có phương thức Chèn lấy IEnumerable <T>?
- 28. Tại sao Iterator có phương thức chứa nhưng Iterable thì không, trong Scala 2.8?
- 29. Trong PHP, tại sao tôi có thể truy cập phương thức không tĩnh theo cách tĩnh?
- 30. Tại sao chữ số không có quyền truy cập vào các phương thức Số?
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. –
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
Tốt, không biết về loại chuyển đổi trên các lớp đó. Cảm ơn! –