如何存储混合数组数据?

soo*_*ise 5 c# arrays types

假设我有一个数组,我需要存储字符串值以及双值.我知道我可以将双打存储为字符串,只处理转换,但是可以使用具有两种数据类型的数组吗?

kem*_*002 5

确定使用:

object[], ArrayList, or List<Object>;
Run Code Online (Sandbox Code Playgroud)

你必须进行铸造,并且可能会为双打支付拳击处罚,但它们将允许你存储两种不同的类型。


Alb*_*nbo 5

您可以使用object[]并进行某些类型检查.在访问双打时你会得到一些装箱/拆箱,但这比double.Parse()任何时候都要快.

另一种方法是创建一个包含两种类型和标记的类:

class StringOrDouble
{
    private double d;
    private string s;
    private bool isString;

    StringOrDouble(double d)
    {
        this.d = d;
        isString = false;
    }

    StringOrDouble(string s)
    {
        this.s = s;
        isString = true;
    }

    double D
    {
        get
        {
            if (isString)
                throw new InvalidOperationException("this is a string");
            return d;
        }
    }

    string S
    {
        get
        {
            if (!isString)
                throw new InvalidOperationException("this is a double");
            return s;
        }
    }
    bool IsString { get { return isString; } }
}
Run Code Online (Sandbox Code Playgroud)

然后创建一个StringOrDouble数组.这将节省你的一些类型检查和拳击,但会有更大的内存开销.


Pau*_*ett 5

不是最有效的用法,但灵活性如何:

var a = new object[] {1,2,3,"paul",5.5}
Run Code Online (Sandbox Code Playgroud)

甚至

var a = new object[] {1,2,3,"paul",5.5, new List<string>() {"apple","banana","pear"}  }
Run Code Online (Sandbox Code Playgroud)