Как работает несколько вызовов методов в операторе if? - PullRequest
0 голосов
/ 14 июля 2020

Я относительно новичок в C#.

Я пытаюсь понять, как работает текущий бит кода.

public static int Method3()
{
 //some code
   If(Class1.Method1(int Variable1).Method2(Class3 Variable2))
   {
      //even more code
   }
 //some code
}

Хорошо, теперь немного контекста.

Этот оператор if находится в Method3 и Method3 - это Class Class1 .

  • Method1 принимает значение Int и возвращает NULL или Class Class2 .

  • Method2 принимает Class позволяет вызывать его Class3 , и он возвращает true или false .

Итак, я понимаю, что if-выражение является действительным, если условие должен возвращать true или false .

Что будет происходить из Method2 из моего понимания.

Но что такое Method1 здесь делаете? Что происходит с выводом Method1 ? Это как-то влияет на состояние?

Надеюсь, вы, ребята, понимаете, о чем я. Если нет, спросите.

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Было бы намного легче понять, если бы вы получили пример с более значимыми именами.

Предупреждение: этот код и код в вашем вопросе уязвимы для NullReferenceException. Если GetClient вернет null, будет исключение.

Например:

public static bool SellingExample1()
{
   int clientId = 21;
   
   // Possible NullReferenceException
   if(Shop.GetClient(clientId).OwesMoney())
   {
      // Send warning email to sales manager
   }
   // Do selling logic
}

public static bool SellingExample2()
{
   int clientId = 21;

   Client clientToSell = Shop.GetClient(clientId);
   if (clientToSell == null) return false; // Check to avoid NullReferenceException before calling methods on a null object.

   bool clientOwesMoney = clientToSell.OwesMoney();

   if(clientOwesMoney)
   {
      // Send warning email to sales manager
   }
   // Do selling logic
}


public class Shop
{
    public static Client GetClient(int clientId)
    {
        // Look the database and return the client
    }
}

public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
    
    public bool OwesMoney()
    {
        // Return true if there are unpaid bills
    }
}
1 голос
/ 14 июля 2020

Метод не принимает класса. Требуется экземпляр класса.

Думайте о классе как о описании вещи, а об экземпляре как об особой c вещи такого рода, например, Cat может быть классом, в котором «Кот Том» может быть экземпляром.

Картина немного сложнее, потому что методы могут быть static, что означает, что они принадлежат классу или нет, то есть принадлежат экземпляру. Далее я предполагаю, что вы имеете дело с методами stati c, потому что метод в вашем примере - stati c.

Поскольку вы связываете вызовы методов, я предполагаю, что Method1 что-то возвращает (объект instance), вы можете вызвать Method2.

Теперь давайте посмотрим, как можно изменить ваш код с учетом этого понимания:

public static int Method3()
{
    //some code
    int Variable1 = 42;
    Class3 Variable2 = new Class3();
    if(Class1.Method1(Variable1).Method2(Variable2))
    {
        //even more code
    }
    //some code
}
...