Tôi có đoạn mã sau đó tạo ra một DLL (mẫu dụ):Biết nếu Trường/Thuộc tính của một đối tượng là các loại "đơn giản/nguyên thủy" hoặc các đối tượng khác?
public class PluginClass
{
private string _MyString;
public string MyString
{
get { return _MyString; }
set
{
_MyString = value;
RaisePropertyChanged("MyString");
}
}
public int MyInt;
public SpeedGenerator SpeedGenerator1 = new SpeedGenerator();
public GaugeValueGenerator GaugeValueGenerator1
{
get;
set;
}
public PluginClass()
{
GaugeValueGenerator1 = new GaugeValueGenerator();
}
}
Như bạn có thể thấy tôi có 4 lĩnh vực/tài sản.
1 lĩnh vực nguyên thủy (nguyên thủy là int/chuỗi/bool/etcetc ...): Myint 1 nguyên thủy bất động sản: mystring lĩnh vực 1 đối tượng: SpeedGenerator1 sở hữu 1 đối tượng: GaugeValueGenerator1
Khi Im phân tích DLL của tôi tôi đã làm một số mã đó là trong hàm: WriteProperty
var fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);
var props = type.GetProperties();
foreach (FieldInfo field in fields)
{
WriteProperty(field.FieldType, field.Name, XXX);
}
foreach (PropertyInfo prop in props)
{
WriteProperty(prop.PropertyType, prop.Name, XXX);
}
câu hỏi của tôi là trên XXX đó là một boolean cho biết nếu lĩnh vực của tôi/tài sản là "nguyên thủy". Vì vậy, nó phải được đặt thành false nếu nó là một đối tượng. Tôi rơi như tôi đã thử tất cả mọi thứ nhưng tôi không thể giải quyết nó ... Bất kỳ trợ giúp nào cũng sẽ rất được đánh giá cao!
(Ý tưởng của tôi là để gọi
var props = propertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
và xem xét rằng nó nên được bỏ trống với nhiều loại đơn giản/nguyên thủy! Nhưng không ... ví dụ trên String, này trả lại thuộc tính Chars (char []) và Chiều dài (int) ...)
(nb: Tất nhiên tôi không muốn làm một thao tác chuỗi trên sân/property.Name/FullName ... cái gì đó như
if ((propertyType.FullName).Contains("System."))
sẽ rất rất sucky ... và không chính xác)
Bạn sẽ phải xác định ý nghĩa của từ "nguyên thủy". Bạn có muốn xử lý 'chuỗi' như một nguyên thủy, mặc dù nó là một kiểu tham chiếu? Bạn có xem 'DateTime' là nguyên thủy không? Điều gì về 'Guid', hoặc' enum's, hoặc 'System.Object'? –
Đã trả lời trong phần bình luận của câu trả lời được đánh giá cao nhất (tại thời điểm này) –
Kiểm tra "Hệ thống" trong tên đầy đủ cũng không thực sự không an toàn. Không có gì ngăn ai đó tạo một lớp với tên đầy đủ chứa "Hệ thống". ngay cả khi nó không được khuyến khích. – InBetween