C#typecast基本查询

时间:2009-11-06 20:34:10

标签: c# casting

我是C#

的新手

我有一个类似

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

现在我有一个字符串

string strquery;

我想获取名称为strquery的Package的intvalues值。

据我所知,这不起作用

(Package)strquery.strvalue

请帮忙

5 个答案:

答案 0 :(得分:2)

好吧,你不能做那样的事情。因为字符串没有定义任何显式的转换操作符,例如struct Package

此外,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(" ");
    }
}

答案 1 :(得分:0)

您无法将字符串类型强制转换为包类型。要获取strvalue的值,首先需要创建一个Package结构对象。

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

答案 2 :(得分:0)

首先,请澄清您的代码,因为它没有任何意义。

其次,问问自己为什么使用结构?你确定你需要一个结构吗?而不是一个班级?查看有关该主题的StackOverflow上的其他问题。

第三

(Package)strquery.strvalue

不是有效代码。 strquery是字符串,无法转换为结构。这些不是任何级别的彼此相关的对象。 (除了它们都来自对象类)

第四,如果我假设你有一个基于你的“问题”的包的集合

  

我想取intvalues的值   名称为strquery的包。

你想要这样的东西

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

答案 3 :(得分: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];

但这只是枚举一个集合来根据一个键找到一个值,你的问题确实可以使用一些澄清。为什么不在不试图建议使用什么代码的情况下发布您尝试做的事情......

答案 4 :(得分:0)

好像您可能正在尝试使用Package结构解析String。如果是这样,那么你可以通过将结构转换为封装和操作字符串来尝试这样的事情。

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
}

这将允许您使用包含这样的字符串的Package结构:

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