2017-06-18 91 views
0

我正在使用Unity3D。C#將一行代碼的一部分更改爲變量

我有一個腳本來基於生物的某個值對列表進行排序。

例如,這些生物有一個變量,說明他們吃了多少食物,目前有多少卡路里,以及它們有多大。

我希望用戶能夠通過單擊按鈕來更改值的排序方式。我不想堆積if語句雖然,如

if(sortType == "calories") { 
    entrySortedText.text = creatureData.calories.ToString(); 
} else if(sortType == "food eaten") { 
    entrySortedText.text = creatureData.foodEaten.ToString(); 
} 

我希望能夠像做

entrySortedText.text = creatureData.sortType.ToString(); 

自動找到的那種類型是什麼名稱的變量在creatureData中。但顯然這不起作用,因爲在生物數據中沒有變量「sortType」,但我希望它用變量名稱自動替換sortType,比如「calories」或「food eaten」。

有沒有人知道一種方法來將一行代碼的一部分更改爲變量的值?或者我必須使用一堆if語句?

謝謝。您的迴應非常重要。

P.S.

這裏是當前排序代碼:

public void LoadList() { 
    foreach(Transform child in transform) { 
     GameObject.Destroy(child.gameObject); 
    } 

    List<GameObject> creatures = new List<GameObject>(GameObject.FindGameObjectsWithTag("Creature").ToList()); 

    // Sort list based on calories 
    creatures.Sort(
     delegate(GameObject i1, GameObject i2) { 
      return i2.GetComponent<CreatureData>().calories.CompareTo(i1.GetComponent<CreatureData>().calories); 
     } 
    ); 

    foreach(GameObject creature in creatures) { 
     GameObject entry = Instantiate(entryPrefab); 
     entry.transform.SetParent(transform, false); 
     entry.transform.GetChild(0).GetComponent<Text>().text = creature.GetComponent<CreatureData>().creatureName; 
     entry.transform.GetChild(1).GetComponent<Text>().text = creature.GetComponent<CreatureData>().calories.ToString(); 
     entry.GetComponent<CreatureListEntryButton>().targetCreature = creature; 
    } 
} 
+0

你可能尋找一個字典。 – SLaks

+1

但是我沒有在您發佈的代碼中看到任何排序代碼。這不是排序:'creatureData.calories.ToString();' – CodingYoshi

回答

0

所以,你要作爲排序依據的屬性,但該屬性將在運行時決定。 假設您有一個名爲items的集合,並且這些項目有一個名爲Calories的屬性。然後,你可以這樣做:

var sortBy = "Calories"; 
var propertyInfo = typeof(YourObject).GetProperty(sortBy); 

然後你就可以排序是:

var orderByCalories = items.OrderBy(x => propertyInfo.GetValue(x, null)); 
+0

如果我不想在運行時設置它,該怎麼辦? – RugbugRedfern

+0

@rugbugreddern好吧,奇怪。那你想什麼時候設置它?有時你必須做出決定。編譯或運行時。還有什麼其他選擇? – CodingYoshi

+0

@rugbugredfern請參閱上面的評論。對不起,拼寫錯了你的名字。 – CodingYoshi

相關問題