C# 是否可以使用变量替换If条件?

C# 是否可以使用变量替换If条件?,c#,if-statement,C#,If Statement,因为我需要在三个地方使用j%3和j%5,所以我把它当作一个变量来使用,我只想知道,这是否减少了内存存储并提高了效率 private void forloo() { bool a = j % 3 == 0; bool b = j % 5 == 0; for (int i=0; i < j; i++) { if (a&&b)

因为我需要在三个地方使用j%3和j%5,所以我把它当作一个变量来使用,我只想知道,这是否减少了内存存储并提高了效率

private void forloo()
        {
            bool a = j % 3 == 0;
            bool b = j % 5 == 0;
            for (int i=0; i < j; i++)
            {
                if (a&&b)
                {
                    richTextBox1.Text += "Hop\n";
                }

                if (a)
                {
                    richTextBox1.Text += "Hoppity\n";

                }
                else if (b)
                {
                    richTextBox1.Text  += "HopHop\n";
                }
            }
        }
private void forloo()
{
bool a=j%3==0;
布尔b=j%5==0;
对于(int i=0;i
在这种情况下,如果不经常这样做,您可能不会看到性能有多大提高。如果布尔值更复杂,或者包含对其他函数的调用,那么最好将它们存储在变量中


对于
bool

而言,对内存的影响可以忽略不计。如果您正在执行一个FizzBuzz程序,则需要检查
i
是否可被3和5整除,而不是
j


任何优化器都将看到公共子表达式,而不是继续重新计算它。然而,为了可读性,通常需要使用变量。在这种情况下,
a
b
是不够好的名称。

在您的情况下,实际上不需要在循环中包含多个
if
语句。写为:

    private void forloo()
    {
        bool a = j % 3 == 0;
        bool b = j % 5 == 0;
        string text = string.Empty;
        if (a&&b)
        {
            text = "Hop\n";
        }
        if (a)
        {
            text = "Hoppity\n";

        }
        else if (b)
        {
            text  = "HopHop\n";
        }
        for (int i=0; i < j; i++)
        {
            richTextBox1.Text += text;
        }
    }
private void forloo()
{
bool a=j%3==0;
布尔b=j%5==0;
string text=string.Empty;
如果(a&b)
{
text=“Hop\n”;
}
如果(a)
{
text=“hoppet\n”;
}
若否(二)
{
text=“HopHop\n”;
}
对于(int i=0;i

但是正如Lou Franco的回答所说,你可能做了错误的事情。

是的,正如你可能通过编译和运行它看到的那样,你的程序工作原理是一样的。我更担心的是两个字符串上的
+=
(与使用
StringBuidler
)而不是算术布尔等式。我想说,性能上的差异几乎没有。+1:您还需要将
a=…
b=…
放在for循环的范围内。+1用于最后两句话;当我们讨论千分之一秒的差异时,哪个更有效。真正重要的是编写更好的代码。