Я получил следующий код, который генерирует DLL (пример примера):
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();
}
}
Как вы можете видеть, я получил 4 поля / свойства.
1 примитивное поле (примитив int/ string / bool / etcetc ...): свойство примитива MyInt 1: поле объекта MyString 1: свойство SpeedGenerator1 1: свойство GaugeValueGenerator1
Когда я выполняю синтаксический анализ своей библиотеки DLL, мне нужно выполнить некоторый код в функции: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);
}
У меня вопрос к XXX, который является логическим значением, указывающим, является ли мое поле / свойство "примитивным".Таким образом, он должен быть установлен в false, если это объект.Я упал, как будто перепробовал все, но не могу решить ... Любая помощь будет очень признательна!
(Моя идея состояла в том, чтобы позвонить
var props = propertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
и считать, что это должнобыть пустым для простых / примитивных типов! Но нет ... например, для String, это возвращает свойства Chars (char []) и Length (int) ...)
(nb: Конечно, я надеваюне хочу выполнять строковую операцию над полем / свойством. Имя / Полное имя ... что-то вроде
if ((propertyType.FullName).Contains("System."))
было бы очень и очень неприятно ... и неточно)