【问题标题】:Does a List<T> Contains a property of T?List<T> 是否包含 T 的属性?
【发布时间】:2011-12-07 08:51:57
【问题描述】:

我得到了这份清单:

private static List<Type> _AbstractTypes = new List<Type>();

后来在我的项目中,我得到了一个对应于 Type.FullName 的string。 问题是我想检查我的字符串是否包含在我的列表中,但我无法避免循环可用:( 我正在寻找类似的东西:

_AbstractTypes.FullName.Contains(myString)

我完全知道我以前的代码根本不可编译,但这正是我正在寻找的东西! 在此先感谢您的帮助

【问题讨论】:

  • 所以你不想使用循环?或者你只是想帮助实现一个循环?因为我认为使用 foreach 循环你会得到想要的结果。

标签: c# list contains


【解决方案1】:

你可以使用Linq,但我们这里只讨论无循环构造,引擎盖下的代码必须做一个循环,如果你想做得更好,你可以使用HashSet&lt;T&gt;

Linq 代码可能如下所示:

_AbstractTypes.Any(t => t.FullName == myString);

HashSet&lt;Type&gt; 代码可能如下所示:

var types = new HashSet<Type>();
types.Add(typeof(int)); //Fill it with types
types.Add(typeof(double));

//Check by getting types from their string name, you could of course also cache those types
Console.WriteLine("Contains int: " + types.Contains(Type.GetType(intName))); //True
Console.WriteLine("Contains float: " + types.Contains(Type.GetType(floatName))); //False

【讨论】:

  • _AbstractTypes.Any(t => t.FullName == myString);是完美的 :) 通过“无循环”,我的意思不是一些看起来很老派的代码,你的答案就是我想要的 ;) thx!
  • @GuillaumeSlashy Linq 看起来既现代又酷,所以它应该起到不显得老派的作用:-)
  • 是的,这正是我想要的:>
【解决方案2】:

这段代码:

bool result = _AbstractTypes.Any(t=>t.FullName == myString);

应该做的工作。

它将针对所有类型测试谓词,直到满足一个(返回 true)或不满足(返回 false)。

【讨论】:

    【解决方案3】:

    如果列表包含元素,您可以执行_AbstractTypes.First().GetType() 之类的操作。

    【讨论】:

      【解决方案4】:

      你可能想要这样的东西:

      _AbstractTypes.Any(t=>t.FullName.Contains(myString))
      

      【讨论】:

        【解决方案5】:

        你无法避免循环。

        你可以做(​​在幕后循环):

        bool check = _AbstractTypes.Any(item => item.FullName == myString);
        

        【讨论】:

          【解决方案6】:

          我认为您可以通过这种方式找出列表中是否包含类型:

          if (_AbstractTypes.Contains(typeof(string)))
          {
              // Do Something
          }
          

          【讨论】:

            猜你喜欢
            • 2011-09-09
            • 2012-08-23
            • 1970-01-01
            • 1970-01-01
            • 2021-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-07-06
            相关资源
            最近更新 更多