2015-10-30 150 views
0

我有一個快速分配值的問題。
在我的新程序中,我試圖根據整數的值爲布爾值賦值。在這裏我的意思一個簡單的例子:根據另一變量將值分配給變量

bool northDoorAvailable; 
int roomLocation; 

// set player Location in some code 
roomLocation = 2; 

// now set if the north door is available 

這是唯一可能在一個功能我寫了很多的if -statements?

public void checkDoors() 
{ 
    if (roomLocation == 1) 
    { 
     northDoorAvailable = false; 
    } 
    if (roomLocation == 2) 
    { 
     northDoorAvailable = true; 
    } 
} 

或者該過程是否可以自動化?

很高興回覆。

+0

你湊ld使用了許多不同的方法,從存儲字典中的值到簡單地將其減少爲單行:'northDoorAvailable = roomLocation!= 1;'例如。 –

+3

這些是唯一的兩種可能的條件嗎?如果'roomlocation == 3'怎麼辦? –

+0

@RonBeyer我如何在代碼中做到這一點?對不起,我相當新的編碼相比,你顯然:) –

回答

2

更好的語法在很大程度上取決於所有可能的條件。現在你可以使用

northDoorAvailable = (roomLocation == 2); 

northDoorAvailable = (roomLocation != 1); 

因爲X == Y回報truefalse取決於這兩個是否是「平等」。 (反之亦然!=

但是,如果roomLocation34

一般而言,usally它能夠簡化這些條件爲單一的邏輯表達,但它可能不總是是這種情況。簡化的一種方法是將所有可能的條件放在"truth table"中,並查看等效的邏輯表達式是什麼。

會有其他人,所以如果roomlocation != possibleLocations它會做northDoorAvailable = false

我假設possibleLocations集合如果整數,如果包含roomlocation然後northDoorAvailabletrue。在這種情況下,你可以使用

northDoorAvailable = (possibleLocations.Contains(roomlocation)); 
+0

@D Stanley Ahhh,現在我明白了。最後一個問題:是否有可能在後臺執行此操作,而其他代碼正在運行,因此不必一遍又一遍地調用它? –

+1

不像你的意思,但你可以讓它成爲_property_,並在你「獲得」財產時進行計算。做一些關於房產,吸氣者和二傳手的研究,並詢問另一個具體的問題,如果你被困住了。這是非常基本的C#東西,所以你可以自己找到答案。 –

0

你可以使用一個字典這樣的:

public class MyGameClass 
{ 
    private Dictionary<int, bool> _northDoorAvailable = new Dictionary<int, bool>(); 

    public MyGameClass() 
    { 
     _northDoorAvailable[1] = false; 
     _northDoorAvailalbe[2] = true; 
     _northDoorAvailable[3] = false; 
     _northDoorAvailable[4] = false; 
     _northDoorAvailable[5] = false; 
    } 

    public bool IsNorthDoorAvailable(int room) 
    { 
     bool available = false; 
     _northDoorAvailable.TryGetValue(room, out available); 
     return available; 
    } 
} 

的字典是鍵/值存儲在那裏,在這種情況下,關鍵是房間號,和該值(=標記的另一側)是門是否可用。您可以快速將案例添加到字典的構造函數方法中,以查看您正在使用的任何類,並且可以在內部或公開地通過IsNorthDoorAvailable方法訪問字典。

0

你可以做的是有一個排序的列表,並解析一個Word文檔或數據庫表間的名單及其相應的布爾值,則只需在列表

1環 - 真正的

2 - 真正

3 - 假

等等

SortedList<int, bool> roomsList = new SortedList<int, bool>(); 

using (StreamReader reader = new StreamReader(@"C:\temp\RoomList.txt")) 
     { 
      string line; 
      while ((line = reader.ReadLine()) != null) 
      { 
       string[] rooms = line.Split('-'); 
       roomsList.Add(int.Parse(rooms[0]), bool.Parse(rooms[1])); 
      } 
     }