簡體   English   中英

如何在C#中使用一種方法修改不同的布爾屬性?

[英]How to modify different boolean properties with one method within C#?

我目前面臨的Menu Strip包含以下幾個不同設置的以下問題:

  • 顯示X
  • 顯示Y
  • 顯示Z

所有這些項目都具有bool類型的相應屬性,因為這些變量也被傳遞給其他類。 當前,當我單擊“顯示Y”時,我有一個名為HandleShowY()的專用功能,該功能可切換菜單條項中的bool和選中標記。

對於每個新添加的屬性,一種新方法在我看來似乎是一種巨大的代碼味道,並且每個新屬性都需要大量的額外開銷。 因此,我想到了制作一個通用的HandleMenuStripItemBool()的想法,該HandleMenuStripItemBool()通過引用接收屬性和菜單項,這樣,只有一種方法可以處理這種行為。

不幸的是,在嘗試通過引用將bool屬性傳遞給此方法時遇到了問題,我對actionfuncdelegate已逐漸消失,並且在閱讀完每本新教程后只會越來越讓我感到困惑。

示例代碼:

// different properties of type bool, defined in form1
private bool ShowX { get; set; }
private bool ShowY { get; set; }

// generic menu strip item bool handler
private void HandleMenuStripItemBool(bool boolProp, ToolStripMenuItem menuItem)
{
    // toggle bool depending on current value
    // add check mark to or remove check mark from ToolStripMenuItem
}

// click event of the "Show X" menu strip item, defined in form1
private void showXToolStripMenuItem_Click(object sender, EventArgs e)
{
    HandleMenuStripItemBool(ShowX, showXToolStripMenuItem);
}

// click event of the "Show Y" menu strip item, defined in form1
private void showYToolStripMenuItem_Click(object sender, EventArgs e)
{
    HandleMenuStripItemBool(ShowY, showYToolStripMenuItem);
}

TL; DR:創建一種可以通過引用接收bool類型的屬性的方法的最佳方法是什么,以便該方法可以重用於其他多個屬性?

提前致謝。

雖然沒有專門回答如何通過引用傳遞bool屬性,但為什么不只使用菜單項的Checked值,在這種情況下,您將不需要維護bool屬性的值,並且僅具有一個來源。真相

private bool ShowX 
{ 
     get { return showXToolStripMenuItem.Checked; } 
     set { showXToolStripMenuItem.Checked = value; } 
}

您可以將其作為參考傳遞並在方法中進行處理:

        bool testBool;
        ToggleBoolValue(ref testBool);
        private void ToggleBoolValue(ref bool toggle)
        {
            toggle = !toggle;
            // some other tasks
        }

如果您使用的是非常現代的C#版本(我認為是7.0或更高版本),則可以使屬性返回ref ,然后按照Michal的建議使用ref

using System;

public class Bob
{
  static void Main()
  {
    var b = new Bob();
    b.showYToolStripMenuItem_Click();
    Console.WriteLine(b.ShowY);
    Console.ReadLine();
  }
  // different properties of type bool, defined in form1
  private ref bool ShowX { get { return ref _showX; } }
  private ref bool ShowY { get { return ref _showY; }  }
  private bool _showX = false;
  private bool _showY = false;

  // generic menu strip item bool handler
  private void HandleMenuStripItemBool(ref bool boolProp)
  {
    boolProp = true;
  }

  // click event of the "Show X" menu strip item, defined in form1
  private void showXToolStripMenuItem_Click()
  {
    HandleMenuStripItemBool(ref ShowX);
  }

  // click event of the "Show Y" menu strip item, defined in form1
  private void showYToolStripMenuItem_Click()
  {
    HandleMenuStripItemBool(ref ShowY);
  }
}

(已添加的主要功能和不相關的參數使之成為獨立的控制台演示)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM