2012-07-31 39 views
0

對不起,我想我以前並不清楚。我正在嘗試像O.R.mapper所說的那樣 - 創建一個任意變量的列表,然後在foreach循環中獲取它們的值。將變量存儲在列表/數組中,並通過後面的循環c#

此外,所有變量都是字符串類型,所以我認爲可以在一個列表中。謝謝。

有沒有辦法將變量存儲在列表或數組中,然後再循環它們。

例如:我有一個名爲x C級三個變量,Y和Z.

我可以這樣做:

公開名單Max_One =新列表{CX,CY,CZ}


,然後在後面的代碼

  foreach (string var in Max_One) 
      {     
       if ((var < 0) | (var > 1)) 
       { 
       // some code here 
       } 
      } 
+0

我真的看不出困難,當然可以接受嗎? – 2012-07-31 13:43:29

+0

您是否試圖將*變量值*轉換爲列表/數組或*變量引用*? – 2012-07-31 13:43:52

+0

你的代碼應該像現在這樣工作,''在C#中'var'是一個關鍵字(避免它或將它作爲前綴'@ var'),如果你希望它們是字符串,你必須聲明這個類型。 – Keith 2012-07-31 13:45:11

回答

0

是否有一個特別的原因,你爲什麼要商店事先列出變量?如果是足以重用這樣當您需要它,我會選擇創建返回IEnumerable<string>屬性列表:

public IEnumerable<string> Max_One { 
    get { 
     yield return c.x; 
     yield return c.y; 
     yield return c.z; 
    } 
} 

值在此枚舉返回只有當屬性的getter是會被檢索調用。因此,得到的枚舉將始終包含當前值c.xc.yc.z

然後,您可以在您的問題中用自己暗示的foreach循環遍歷這些值。

如果您需要逐步彙總變量列表,這可能不實際;在這種情況下,你可能需要反思。如果真的需要,請告訴我;我可以舉一個例子,但它會變得更加冗長和複雜。

+0

感謝Mapper。這只是爲了檢查我們從SQL中提取的數據,因此它具有可接受的值(如整數將有一個範圍)。所以,我正在考慮將相似類型和範圍的變量存儲在列表或數組中,然後循環。不知道這是否是正確的做法。謝謝。 – 2012-07-31 14:47:58

+0

嗨,還有一個問題。有沒有辦法在以後的foreach循環中獲取變量名稱(上例中的'c.x')?非常感謝。 – 2012-07-31 15:53:31

+0

@MG_UK:不,這一般很難做到。即使在做反思的時候,也沒有通過反思來反映什麼變量(指針!)你正在訪問一個給定的對象實例,甚至在那個時候,局部變量名甚至可能沒有調試信息就不會將它編譯到編譯後的二進制文件中。 – 2012-07-31 15:57:33

0

是,如如果他們都是string S:

public List<string> Max_One = new List<string> {c.x,c.y,c.z}; 

它使用collection initializer語法。

雖然將stringint進行比較沒有任何意義。這是一個有效的例子:

foreach (string var in Max_One) 
    {     
     if (string.IsNullOrEmpty(var)) 
     { 
     // some code here 
     } 
    } 
0

你可以嘗試使用:

List<object> list = new List<object> 
{ 
    c.x, 
    c.y, 
    c.z 
}; 
0

如果你的屬性是數字(int,例如),你可以這樣做:

List<int> Max_One = new List<int> { c.x, c.y, c.Z }; 

和使用您的foreach這樣的

foreach(int myNum in Max_One) { ... } //you can't name an iterator 'var', it's a reserved word 

在列表聲明替換int用正確的數值類型(doubledecimal等)

0

我會回答你的問題在逆向

首先,你不能以「無功」命名變量因爲它是保留名稱。所以,你可以對foreach做的是

foreach (var x in Max_One) 
     {     
      if ((x< 0) || (x> 1)) 
      { 
      // some code here 
      } 
     } 

,如果你安裝了.NET 3.0和更高版本的框架,你可以使用「VAR」來定義x作爲Max_One名單中的一員,而不用擔心實際的X型的。如果你的版本比3更老。0,那麼你需要指定x的數據類型,在這種情況下你的代碼是有效的(仍然雖然有風險)

最後一點(這是你的第一個點)

public List Max_One = new List {c.x,c.y,c.z} 

有主要的事情您需要知道,即爲了存儲在列表中,成員必須來自相同的數據類型,因此除非a,b和c來自相同的數據類型,否則不能將它們存儲在同一個列表中。除非定義了列表來存儲數據類型「object」的元素。 如果您使用的「對象」的方法,你需要的元素鑄成原始類型,如:

var x = (int) Max_One[0]; 

你可以閱讀更多關於列表和其他替代從本網站 http://www.dotnetperls.com/collections

附:如果這是作業,那麼你應該閱讀更多,並從視頻教程和書籍中瞭解更多;)

相關問題