2009-11-06 3 views
0

C#C#을 typecast 기본 쿼리

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

이제는 이름이 strquery 인 패키지의 intvalues ​​값을 가져 가고 싶습니다.

제가 시도한만큼,이 작업을하지 못했습니다

(Package)strquery.strvalue 

제발 도와주세요

+4

그 코드는 아마도 당신이 우리에게 좀 더 배경 정보를 제공해야합니다, 전혀 의미가 없습니다. –

+0

일부 컨테이너에 패키지 구조체 모음이 저장되어 있다고 가정합니다. 당신이 묻는 질문은 실제로 패키지 구조가 아니라 컨테이너에 적용됩니다. – qid

+0

내가 알 수있는 한, 구조체는 실제로 C와 같은 다른 언어에 대한 하위 호환성/친숙성을 위해서만 제공됩니다. 대신 클래스를 사용하십시오. –

답변

2

글쎄, 그렇게 할 수는 없습니다. 왜냐하면 문자열은 구조체 과 같은 명시 적 캐스팅 연산자로 정의되지 않았기 때문입니다.

또한 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 값을 얻으려면 먼저 패키지 struct 객체를 만들어야합니다.

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

첫째, 이해가되지 않기 때문에 코드를 명확히하십시오.

둘째, 구조체를 사용하는 이유는 무엇입니까? 당신은 구조체가 필요하다는 것을 확신합니까? 수업이 아니라? 그 주제에 들어가는 StackOverflow의 다른 질문을보십시오.

셋째

(Package)strquery.strvalue 

유효한 코드가 아닙니다. strquery는 문자열이며 패키지 구조체에 캐스팅 될 수 없습니다. 이것들은 어느 레벨에서나 서로 관련된 객체가 아닙니다. (제외 그들은 둘 다 객체 클래스에서 파생 것을) 나는 intvalues의 을의 가치를 먹고 싶어 당신이 "질문"

에 따라 패키지의 모음을 가정한다면

넷째 이름이 strquery 인 패키지 나는 당신이 int 값이 키에 관련 지을 수있는 것이고 종류의 사전이 필요하다 표시되는 질문을 이해하면

는이

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

같은 것을 원한다.당신은 다음과 같이 당신의 구조체를 변경 한 경우 :

다음
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

패키지 구조체를 사용하여 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 
} 

이것은 당신과 같이 문자열로 패키지 구조체를 사용할 수 있도록합니다 :

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