Tôi cố gắng để tạo ra một lớp generic:T không chứa các định nghĩa cho RowKey
public class ClassName<T>
{
public T AccessEntity(string id)
{
return (from e in ServiceContext.CreateQuery<T>(TableName)
where e.RowKey == id // error here!
select e).FirstOrDefault();
}
}
Trong mã này tôi nhận được lỗi rằng:
T không chứa các định nghĩa cho RowKey
nhưng các tham số sẽ thay thế T lúc chạy có định nghĩa của RowKey. Có lẽ vì complier không nhận được định nghĩa cho RowKey trong T tại thời gian biên dịch, đó là lý do tại sao tôi nhận được lỗi này. Ai có thể cho tôi biết làm thế nào để giải quyết vấn đề này?
Như một lời nhận xét - Tôi upvoted một trong những câu trả lời đúng: trình biên dịch không quan tâm những gì T sẽ về sau. Nó quan tâm đến những gì nó BIẾT tại thời gian biên dịch, có nghĩa là bạn CÓ THỂ tạo ClassName và Dumbo không có lỗi RowKey ->. Adda constraint;) –
TomTom
Pro minh họa điểm của TomTom: trong C# bạn có thể viết một kiểu * tại thời gian chạy *, và gọi kiểu generic cho kiểu mới - miễn là nó đáp ứng ràng buộc, nó sẽ hoạt động. Điều này rất khác với các mẫu C++. –