【问题标题】:How does multiple method calls in an if-statement work?if 语句中的多个方法调用如何工作?
【发布时间】:2020-11-03 10:39:05
【问题描述】:

我对 C# 比较陌生。

我试图了解流动的代码是如何工作的。

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

好的,现在介绍一下上下文。

这个 if 语句在 Method3 中,而 Method3 是类 Class1

  • Method1 采用 Int 值并返回 NULL 或 Class Class2

  • Method2 接受一个 Class,我们称它为 Class3,它返回 truefalse

所以我理解如果条件语句有效,条件必须返回 truefalse

根据我的理解,这将来自Method2

但是 Method1 在这里做什么呢? Method1 的输出会发生什么? 对病情有影响吗?

希望你们能明白我的意思。 如果没有请询问。

【问题讨论】:

  • 如果你把代码改写成var intermediateResult = Class1.Method1(int Variable1); if(intermediateResult.method2(Class3 Variable2)) { ... }可能会帮助你理解
  • 请注意,如果 Method1 返回 null,这将导致 NullReferenceException。
  • @Fildor - 是的,如果 Method2 是该类的方法。它可能是一个可能处理null的扩展方法。
  • 2“可能”是 2 太多了@Corak
  • @Fildor - 绝对陈述总是是错误的。 ^_^

标签: c# class if-statement methods


【解决方案1】:

如果你能得到一个名字更有意义的例子会更容易理解。

警告:此代码和您问题中的代码易受 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
    }
}

【讨论】:

  • 感谢您的解释。现在这对我来说很有意义。这比我想象的要容易得多。祝你有美好的一天,布拉德伯里 9。
【解决方案2】:

方法不接受类。它需要一个类的实例。

将类视为对事物的描述,将实例视为此类特定事物,例如Cat 可能是一个类,其中“Tom the cat”可能是一个实例。

图片稍微复杂一些,因为方法可以是static,表示它们属于或不属于类,表示它们属于实例。在下文中,我假设您正在处理静态方法,因为您的示例中的方法是静态的。

因为你是链接方法调用,我假设 Method1 返回一些你可以调用 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 2014-02-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多