C# Linq исключение классов со свойствами типа Dict при выборе несвязанных - PullRequest
0 голосов
/ 10 февраля 2020

Я уже решил одну проблему, но наткнулся на другую. Приведенный ниже код анализирует пространство имен со многими классами внутри и возвращает те, которые не связаны ни с какими другими. Поэтому, если у класса A есть 12 свойств, и одно из них, например,

public ClassB myProperty {get; set;}

, то выборка возвращает только класс A, а не класс B. Пока все хорошо. Однако у меня есть проблема, связывая классы через типы словаря. Например:

class Results
{
[JsonProperty ("jobcodes")]
public Dictionary<string, **jobcodes**>  JobCodes { get; set; }

public Results()
  {
  }
}

class **jobcodes**
{
[JsonProperty ("_status_code")]
public int StatusCode { get; set; }

[JsonProperty ("_status_message")]
public string StatusMessage { get; set; }

[JsonProperty ("id")]
public string Id { get; set; }

public jobcodes ()
{ }
}

Так что, к сожалению, выбор вернет результаты класса * и коды заданий класса, и мне нужно исправить его, чтобы исключить * также свойства, которые являются словарями и ссылаются на другие связанные классы , Ниже кода:

    string Library = "ConsoleApp1.Methods";

    var classes = AppDomain.CurrentDomain.GetAssemblies ()
                            .SelectMany (t => t.GetTypes ())
                            .Where (t =>
                                        t.IsClass &&
                                        t.Namespace == Library &&
                                        !t.IsNested)
                            .ToList ();

    var properties = classes.SelectMany (
        x => x.GetProperties (BindingFlags.Public | BindingFlags.Instance)
                .Select (y => y.PropertyType));

    foreach ( var method in classes.Where (x => !properties.Contains (x)).Select (x => x.Name) )
    {
        Console.WriteLine ("Reading: " + method);
    }

(ПРИМЕЧАНИЕ: двойные звездочки мои, просто чтобы подчеркнуть, где соединение отсутствует, выбор отсутствует - спасибо).

Я пробовал, но не удалось, я не опытен в этом. Может ли кто-нибудь помочь мне, пожалуйста? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...