C# 各种类型的列表?

C# 各种类型的列表?,c#,.net,arrays,list,types,C#,.net,Arrays,List,Types,Id'希望创建一个从一个方法传递到另一个方法的数据列表,但是我不能使用结构,因为此列表中包含的数据将根据输入而变化 比如说 if (x == 1) { a = 1 b = true c = 42 d = "hello" } if (x == 2) { a = 2 b = 'g' c = "sup" } 因此,我认为我的选择是: 创建一个数组或字符串列表,并将数据转换回原来的字符串。这是混乱的,可能会导致错误的不可理解的输入,虽然不会那么糟糕,

Id'希望创建一个从一个方法传递到另一个方法的数据列表,但是我不能使用结构,因为此列表中包含的数据将根据输入而变化

比如说

if (x == 1) {
   a = 1 
   b = true   
   c = 42
   d = "hello"
}

if (x == 2) {
   a = 2
   b = 'g'
   c = "sup"
}
因此,我认为我的选择是:

  • 创建一个数组或字符串列表,并将数据转换回原来的字符串。这是混乱的,可能会导致错误的不可理解的输入,虽然不会那么糟糕,因为它都是在运行时检测到的
  • 为每种可能性创建一个结构-这是一个好的实践吗
  • 以某种方式使用泛型。据我所知,虽然泛型是类型安全的,但不是类型严格的,但在使用之前必须将它们转换为类型。例如,如果我想要这里的项目列表,我需要将它们转换为字符串,就像解决方案1一样,这样就没用了
  • 那么,我的问题是,这些选项中哪一个是最好的?或者有没有一个替代选项使用某种我不知道的泛型类型?在每种情况下,可能的变量数量可能会随着其类型而变化。我希望能够将单个列表或数组返回给调用方法,以便它可以适当地处理结果。它将知道如何根据a的值处理每组数据,因为它将是“操作选择”标识符。我还意识到,每次将它们投射到对象和背面都是非常密集的,所以我宁愿避免这种情况


    这可能很简单,但它让我感到困惑…

    因为您事先不知道列表将包含什么,所以它看起来是使用


    如果你想用一个键返回值,考虑使用.

    。.Net中的一般原则是,每种类型都可以被转换成Stask.Objor(尽管它可能涉及装箱)。您可以使用以下方法

    void Foo(params object[] parameters) { ... }
    
    或者使用System.Collections.ArrayList类

    “问题”是,当您想要使用这样的值时,您需要如下代码:

       if (parameters[i] is string)
       {
          string s = (string) parameters[i];
          ...
       }
    

    很抱歉,这不是一个与代码相关的答案:在这种构造背后可能隐藏着一个错误的设计。确保你知道你在做什么,否则事情可能会反击

    如果确实需要事先不知道所使用字段的类型,则需要一种使用字段类型保存数据的方法,如

    struct foo {
        private object _value;
        private string _type;
        foo(string myType, object myValue) {
            _value = myValue;
            _type = myType;
        } 
    }
    

    然后使用泛型来处理业务逻辑。

    您可以使用
    字典/哈希表来表示数据项,然后将这些字典添加到
    列表中


    如果需要,您还可以将额外的类型信息添加到字典值中。

    基本上,您需要键入一个列表,然后返回

    我的问题是,从结构上讲,您如何知道哪些索引属于哪种类型?这听起来是一个痛苦的解决方案

    如果确实需要在列表中存储不同的类型,可以尝试使用包含每种类型的成员的结构,以及指示表示哪种数据类型的标志。然后对该结构使用泛型集合。类似于(从我的头顶上)

    然后是通用列表:

    var values = new List<FooType>();
    
    var值=新列表();
    
    现在,您可以使用该类型在列表中添加和删除条目,这将指示核心数据到底是什么


    我还是不喜欢这个答案;听起来您的设计可能试图做得太多,可能有重构的机会,但由于我看不到您的更多代码或意图,我所能做的就是回答您的问题。:)

    为了提供更多的信息,基本上这是试图根据用户的选择解释输入字符串中的各种数据。如果他们说了一件事,我需要检查数据,然后抓取它,列出这些数据及其类型(各种东西都是从这些信息中派生出来的)。问题是我想让它可以扩展,这样我就可以随时添加内容,而不必遵守严格的结构,而且我不必在使用时重铸所有内容。我喜欢ArrayList的建议,也喜欢重构的建议。我会试着修改它。
    var values = new List<FooType>();