构建和使用通用列表?

Bre*_*ett 2 c# generics generic-list .net-4.0

任何人都可以帮我弄清楚如何简化这段代码,而不使用ArrayList

List<Pair> material = new List<Pair>();
List<string> list = new List<string>();

string tempStr;
int integer = -1;
foreach (string s in ((string)Value).Split(new char[1] { ',' }))
{
  if (int.TryParse(s, out integer))
  {
     tempStr = NameValue.AllKeys[integer];

     if (someCondition == true)
     {
        material.Add(new Pair(tempStr, integer));
     }
     else
     {
        list.Add(tempStr);
     }
  }
}
if(someCondition == true)
{
  return material.ExtensionMethodForLists();
}
else
{
  return list.ExtensionMethodForLists();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试过类似下面的内容时,我会因为没有初始化一个有意义的类型变量而出错.

var list;
if(someCondition == true)
{
  list = new List<Pair>();
}
else
{
  list = new List<string>();
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

如果使用不同的类型,则需要为变量使用非泛型类型:

IList list;
if(someCondition == true)
{
  list = new List<Pair>();
}
else
{
  list = new List<string>();
}
Run Code Online (Sandbox Code Playgroud)

要么

IList list = someCondition ? (IList)new List<Pair>() : new List<string>();
Run Code Online (Sandbox Code Playgroud)

就个人而言,我不确定它是一个伟大的设计,但它满足要求.

  • 只有非泛型IList的问题是,使用它与使用ArrayList并不远. (2认同)
  • @KeithS - 不完全; 你不能把`Pair`放在`List <string>`中,即使它被公开为`IList` (2认同)