2009-11-06 76 views
0

我是新來的C#C#類型轉換的基本查詢

我有一個像

struct Package 
{ 
Public int[] intvalues; 
Public char[] charvalues; 
Public string strvalue; 
} 

一個struct現在我有一個字符串

string strquery; 

我要帶的intvalues的價值名稱爲strquery的軟件包。

至於我試過了,這個沒有工作

(Package)strquery.strvalue 

請幫

+4

該代碼是沒有意義的,也許你應該給我們多一點背景資料。 – 2009-11-06 20:35:40

+0

我假設你有一個包裝結構的集合存儲在某個容器中;你問的問題實際上適用於容器,而不是Package結構。 – qid 2009-11-06 20:37:19

+0

據我所知,結構實際上只是爲了向後兼容/友好而提供給其他語言,如C,而不是使用類。 – 2009-11-06 20:54:34

回答

2

那麼,你不能做那樣的事情。因爲一個字符串沒有定義任何顯式的轉換運算符,比如你的struct

此外,strquery.strvalue是完全錯誤的,因爲字符串沒有這樣的字段。

您可以嘗試一下Phaedrus說的話。

從你所說的話到現在爲止,我認爲你正在做這樣的事情:

List<Package> listOfPackages =new List<Package>(); 
// You fill up here the list 
foreach (Package pkg in listOfPackages) 
{ 
    if (pkg.strvalue == strquery) 
    { 
     Console.WriteLine("found a package with items:"); 
     // write the pkg.intvalues 
     for(int i=0;i<pkg.intvalues.Length;i++) 
      Console.Write(pkg.intvalues[i].ToString()); 
     Console.WriteLine(" "); 
    } 
} 
0

你不能投一個字符串類型的封裝類型。要獲得strvalue的值,您需要先創建一個Package結構對象。

Package package = new Package(); 
... 
string value = package.strvalue; 
0

首先,請說明你的代碼,因爲它沒有任何意義。

其次,問問自己爲什麼使用struct?你確定你需要一個結構?而不是一個班級?查看關於該主題的其他StackOverflow問題。

(Package)strquery.strvalue 

無效代碼。 strquery是一個字符串並且不能被鑄造成結構。這些不是在任何級別上彼此相關的對象。 (除非它們都從對象類派生)

四如果我假設你有包裝的集合,根據您的「問題」

我想利用intvalues的 的價值名稱爲strquery的軟件包。

你想是這樣的

int[] foundValues; 
foreach(Package pack in packageCollection) 
{ 
    if(pack.strvalue == strquery) 
     { 
     foundValues = pack.intvalues; 
     break; 
     } 
} 
0

如果我理解看來你是需要地方和int值將與鍵關聯各種各樣的字典問題。如果你改變了你的結構看起來像這樣:

class Package // I would recommend using a class 
{ 
    Public Dictionary<string, int> intValues; 
} 

,那麼你可以「查詢」是有這樣的正確的密鑰的int值...

var strQuery = "intA"; 
var pakage = new Package() 
pakage.intValues = new Dictionary<string, int>() 
{ 
    new KeyValuePair<string, int>("intA", 0), 
    new KeyValuePair<string, int>("intB", 0), 
    new KeyValuePiar<string, int>("intC", 9), 
} 

var result = pakage.inValues[strQuery]; 

但是,這真的只是一個枚舉收集找到一個基於關鍵的價值,你的問題可以真正使用一些澄清。爲什麼你不發佈你想做什麼,而不試圖建議使用什麼代碼...

0

看起來好像你可能試圖用你的Package結構來解析字符串。如果是這樣,那麼你可以嘗試通過轉換你的結構來封裝和操作一個字符串。

struct Package { 
    public Package(string str) { //constructor 
     strvalue = str; 
    } 
    public int[] Get_intvalues() { // method version 
     // Convert stvalue into int array and return it. 
     return new[] {1,2,3}; //example 
    } 
    public char[] Get_charvalues() { // method version 
     return strvalue.ToCharArray(); 
    } 
    public string strvalue; // string to work upon 
} 

這將允許您使用字符串中使用你的包結構如下所示:

string str = "this is a test"; 
Package pkg = new Package(str); 
pkg.Get_charvalues(); 
pkg.Get_intvalues(); //etc.