如何在C#中创建自定义类型数组?

Vik*_*oss 2 c# arrays types

我创建了一个包含不同类型元素的对象数组:

public static int a;
public static string b;
public static ushort c;

object[] myobj = new obj[]{ a, b, c};
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个包含此myobj类型数组元素的数组,我该怎么做?

我的意思是这样的:

myobj[] myarray = new myobj[];  <= but to do this, myobj should be a type. 
Run Code Online (Sandbox Code Playgroud)

不知道如何解决这个问题.

感谢大家.

Ode*_*ded 5

创建一个包含所需类型的类型,并创建一个类型.

public class MyType // can be a struct. Depends on usage.
{
  // should really use properties, I know, 
  // and these should probably not be static
  public static int a;
  public static string b;
  public static ushort c;
}

// elsewhere
MyType[] myobj = new MyType[]{};
Run Code Online (Sandbox Code Playgroud)

不知道为什么你会想要跳过篮球object[]并且不得不在整个地方投球.


Gus*_*ori 5

我们如何用a Dictionary来存储你需要的任何类型?

所以,虽然你不会完全拥有myType.a,但你可以拥有myType.Values["a"]足够接近的标准C#结构,并为你提供很多灵活性/可维护性

public class MyType
{
    public MyType()
    {
        this.Values = new Dictionary<object, object>();
    }

    public Dictionary<object, object> Values
    {
        get;
        set;
    }
}
Run Code Online (Sandbox Code Playgroud)

样本用法:

using System;
using System.Collections.Generic;

public static class Program
{
    [STAThread]
    private static void Main()
    {
        var myTypes = new MyType[3];

        myTypes[0] = new MyType();
        myTypes[1] = new MyType();
        myTypes[2] = new MyType();

        for (var current = 0; current < myTypes.Length; ++current)
        {
            // here you customize what goes where
            myTypes[current].Values.Add("a", current);
            myTypes[current].Values.Add("b", "myBvalue");
            myTypes[current].Values.Add("c", (ushort)current);
        }

        foreach (var current in myTypes)
        {
            Console.WriteLine(
               string.Format("A={0}, B={1}, C={2}", 
                              current.Values["a"], 
                              current.Values["b"],
                              current.Values["c"]));
        }

 }
Run Code Online (Sandbox Code Playgroud)

另外,如果需要,可以轻松地indexer向类添加属性,这样您就可以使用语法访问元素myType["a"].请注意,添加或检索值时应添加错误检查.

public object this[object index]
{
    get
    {
        return this.Values[index];
    }

    set
    {                    
        this.Values[index] = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是使用索引器的示例.将条目增加"1",以便我们看到ouptut的差异:

for (var current = 0; current < myTypes.Length; ++current)
{
    myTypes[current]["a"] = current + 1;
    myTypes[current]["b"] = "myBvalue2";
    myTypes[current]["c"] = (ushort)(current + 1);
}

foreach (var current in myTypes)
{
    Console.WriteLine(string.Format("A={0}, B={1}, C={2}", 
                                    current["a"], 
                                    current["b"], 
                                    current["c"]));
}
Run Code Online (Sandbox Code Playgroud)