簡體   English   中英

C#:通過變量引用類

[英]C#: Referencing Classes by a Variable

我試圖在C#中使用變量,但是遇到了障礙。 以下不起作用。

public static void SetBG(string s)
{
    Console.BackgroundColor = ConsoleColor.s;
}

一個非常簡單的方法,應根據程序員通過s變量發送的內容設置控制台的背景顏色。 如果我使用SetBG("Red"); ,它應該通過,但它不會。 這是因為System.ConsoleColor' does not contain a definition for 's'

我怎么能在C#中做到這一點?

這不是正確的方法,看起來你有兩個主要概念,理解它們將幫助你正確地做到這一點。

首先, s是當前類中的變量。 ConsoleColor.s會引用ConsoleColor類中的s變量(它沒有一個,因此你的錯誤)。 這稱為范圍封裝 ,允許我們重用常見的單詞/名稱而不會發生沖突。

其次,您的代碼將在運行之前進行編譯,而ConsoleColor.s (假設有這樣的東西)將不再說ConsoleColor.s 相反,它將指向存儲器中存儲表示“s”的值的位置。 傳遞給您的方法的s將是一個字符串,例如“Red”或“Blue”。 這樣的字符串和內存中的插槽之間沒有連接,以便不同的對象存儲它的值。

要執行您要執行的操作,您需要獲取顏色的名稱並將其轉換為顏色。 一種方法是使用一系列if / else語句檢查字符串的內容,並在匹配顏色名稱時指定適當的顏色。
幸運的是,有一種更簡單的方法。 您可以簡單地將字符串解析為ConsoleColor

按照MSDN中的示例,您可以執行以下操作:

Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
Console.BackgroundColor = (ConsoleColor)Enum.Parse(typeof (ConsoleColor), s);

ConsoleColor是一個枚舉。 你必須投s

public static void SetBG(string s){
   Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);
}

這是因為ConsoleColor是枚舉,請嘗試

 Console.BackgroundColor = (ConsoleColor) Enum.Parse(typeof(ConsoleColor), s);

如果字符串無效(例如s =“Ship”),你應該考慮處理這樣的事情

 ConsoleColor colorValue;
 if (Enum.TryParse(s, out colorValue))
 {        
     Console.BackgroundColor = colorValue;
 }
ConsoleColor colour;
if (ConsoleColor.TryParse(s, out colour))
{
   Console.BackgroundColor = colour;
}

只是為了添加其他人對Enum.Parse方法的使用,從.NET 4.0開始,您可以使用Enum.TryParse泛型方法來更好地處理無效值:

public static void SetBG(string s)
{
    ConsoleColor color;

    if (!Enum.TryParse<ConsoleColor>(s, out color))
        throw new ArgumentException("s");

    Console.BackgroundColor = color;
}

暫無
暫無

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

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