2009-11-06 59 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.