2011-05-03 59 views
-2

如何获取要在SWITCH/CASE函数中使用的对象数组的属性名称,如下所示?任何其他建议如何做到这一点表示赞赏。参考对象数组名称作为属性

Object[] objEURUSD = ConvertStringtoObjectArray(string val1); 

Object[] objAUDUSD = ConvertStringtoObjectArray(string val2); 

Object[] objGBPUSD = ConvertStringtoObjectArray(string val3); 

实例功能使用

Object[] mvavgEURUSD = mvavgObject(objEURUSD); 


private Object[] mvavgObject(Object[] val) 
{ 

    string sym = val.ToString() // this does not return the name it returns 'System.Object' 

    switch (sym) 
    { 
     case "objEURUSD": 

      // do something 
      break; 

     case "objAUDUSD": 

      // do something 
      break; 

     case "objGBPUSD": 
      // do something 
      break; 

    } 
} 

我可能包括对象数组的对象本身“欧元兑美元”的名称,但它在对象的名称已经inlcuded ..我只是可以”弄清楚如何引用对象的名字。要么我不知道,要么我不熟悉反思。

我感谢您对此事的帮助或建议。

+1

你的代码没有按”没有意义。请张贴真实的代码,而不是仅仅接近代码的东西。另外,请发布'ConvertStringtoObjectArray'的声明,否则我们无法猜测它做了什么。 – Timwi 2011-05-03 22:26:01

+0

为什么(以及如何)将字符串转换为Object []? – 2011-05-03 22:28:45

+0

这是一个错误,它应该读取:Object [] objAUDUSD = ConvertStringtoObjectArray(String [] val2); – CraigJSte 2011-05-03 23:06:47

回答

1

我如何获得对象数组的属性名称在SWITCH/CASE使用功能?

通过不是做转换。您可以在switch语句中使用string,但不能使用object[]

+0

感谢您保持简单。 – CraigJSte 2011-05-03 23:12:51

1

你不能这样做,因为对象没有这样的“名字”。这甚至没有意义 - 许多变量可以持有对同一对象的引用。哪一个应该是“名字”?

想象一下,会有这样一个名为GetName()的函数。程序在每种情况下输出什么?

情况1:

var a = new MyObject(); 
var b = a; 
Console.WriteLine(GetName(b)); // Is it "a" or "b"? 

情况2:

Console.WriteLine(GetName(new MyObject())); // What is the name now? 

情况3:

Console.WriteLine(GetName(null)); // I guess you can return null here, but see case 4: 

情况4:

MyObject a = null; 
Console.WriteLine(GetName(a)); // Should this be "a" or null? 

等等等等。

如果你想给你的对象“名字”,你必须自己做。也许创建一个“NamedObject”包装类,像这样:

class NamedObject<T> 
{ 
    public readonly T Object; 
    public readonly string Name; 

    public NamedObject(string name, string value) 
    { 
     this.Object = value; 
     this.Name = name; 
    } 
} 
+0

谢谢我认为这是一个有趣的方式来回答这个问题。我想总体的答案是否定的,但是感谢参考对象的名字没有参考,除非你添加它们。 – CraigJSte 2011-05-03 23:12:02

0

没有进一步的信息,我只能猜测ConvertStringtoObjectArray一样。我的猜测是,它使用字符串作为关键字,然后返回一些值的数组。

在大多数情况下,我希望原始字符串不再包含在对象数组中。因此,显然,你不能检索它,所以你将不得不“记住”它,即传递它。

例如,而不是

Object[] objEURUSD = ConvertStringtoObjectArray(myVal); 
Object[] mvavgEURUSD = mvavgObject(objEURUSD); 

private Object[] mvavgObject(Object[] val) 
{ 
    // ... 

你可以写这样的事情:

Object[] mvavgEURUSD = mvavgObject(myVal); 

private Object[] mvavgObject(string val) 
{ 
    Object[] objEURUSD = ConvertStringtoObjectArray(val); 

    // The string is in the parameter ‘val’, so we can use it here 
    switch (val) 
    { 
     // ... 
    } 
} 
0

ToString()的默认行为是返回类名。这可以在任何类中重写,因为所有类都从对象继承。 string.ToString()是你正在寻找的行为,所以你可能需要先将对象转换回字符串(数组部分是棘手的,虽然我不知道ConvertStringtoObjectArray方法是什么),但是你需要做一个投到访问您正在寻找的东西。

我假定object []是一个char []?如果是这样的话,演员应该像将对象转换为char []然后转换为字符串一样简单。

+0

该对象应该是一个字符串数组..它被误写了。 – CraigJSte 2011-05-03 23:12:38

+0

然后将数组的每个成员都转换回方法中的字符串,并完成。 – 2011-05-04 02:22:30

0

如果“objEURUSD”的变量声明在您当前的作用域中,那么您可以将您的参数与该变量进行比较,以确定两者是否引用相同的对象......这不会查找某种名称,但也许这是你想要的...

Object[] objEURUSD; //initialized somewhere else 


private Object[] mvavgObject(Object[] val) 
{ 
    if(val==objEURUSD) 
    { 
     //it's the array referenced by objEURUSD ... 
    } 
} 

作为替代,你可以使用一个Dictionary<string,Object[]>Dictionary<Object[],string>来存储您的阵列,这样你就可以查找该数组对于给定的名称或反之亦然