加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net – 将StringCollection转换为List

发布时间:2020-12-16 22:34:44 所属栏目:大数据 来源:网络整理
导读:通常,我会选择List String [或者,在VB中,List(Of String)] over StringCollection尽可能:另见 Best string container。 然而,看起来,泛型 – 因此,List String – 显然不支持VS 2008的设置。因此,如果我想在我的用户设置中使用字符串列表,我不得不
通常,我会选择List< String> [或者,在VB中,List(Of String)] over StringCollection尽可能:另见 Best string container。

然而,看起来,泛型 – 因此,List< String> – 显然不支持VS 2008的设置。因此,如果我想在我的用户设置中使用字符串列表,我不得不求助于使用StringCollection。

现在,因为我不想看到我的代码中的StringCollection,我需要将其转换为List< String&gt ;.我如何有效地这样做?或者,更好的是,我错了,有一种方法使用List< String>在设计设计师?

编辑:我必须使用.NET 2.0。

如果你必须使用.NET 2.0,我会想象最干净的选择是创建一个包装器StringCollection实现IEnumerable< string>和IEnumerator< string>分别用于StringCollection和StringEnumerator。 (注意:根据元数据,StringEnumerator不实现IEnumerator)。下面的示例。然而,在一天结束时,某人将在StringCollection上做一个foreach(),所以可以认为一个简单的foreach(stringCollection中的字符串项)并添加到List< string>就足够了;我怀疑这不会是足够满足您的需求。

你也可以实现IList< string>使用这种方法,保存你重复的底层字符串,但你会支付一个惩罚,“包装器”类型委托调用(在堆栈上多一个方法调用!)。我建议你处理在系统中的接口的事情无论如何IEnumberable< string>,IList< string>等等,而不是具体的List,它会引导你走一条更大的灵活性的道路。

static void Main(string[] args)
    {
        StringCollection stringCollection = new StringCollection();
        stringCollection.AddRange(new string[] { "hello","world" });

        // Wrap!
        List<string> listOfStrings = new List<string>(new StringCollectionEnumerable(stringCollection));

        Debug.Assert(listOfStrings.Count == stringCollection.Count);
        Debug.Assert(listOfStrings[0] == stringCollection[0]); 

    }

    private class StringCollectionEnumerable : IEnumerable<string>
    {
        private StringCollection underlyingCollection; 

        public StringCollectionEnumerable(StringCollection underlyingCollection)
        {
            this.underlyingCollection = underlyingCollection; 
        }

        public IEnumerator<string> GetEnumerator()
        {
            return new StringEnumeratorWrapper(underlyingCollection.GetEnumerator()); 
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator(); 
        }
    }

    private class StringEnumeratorWrapper : IEnumerator<string>
    {
        private StringEnumerator underlyingEnumerator; 

        public StringEnumeratorWrapper(StringEnumerator underlyingEnumerator)
        {
            this.underlyingEnumerator = underlyingEnumerator;
        }

        public string Current
        {
            get
            {
                return this.underlyingEnumerator.Current; 
            }
        }

        public void Dispose()
        {
            // No-op 
        }

        object System.Collections.IEnumerator.Current
        {
            get
            {
                return this.underlyingEnumerator.Current;
            }
        }

        public bool MoveNext()
        {
            return this.underlyingEnumerator.MoveNext(); 
        }

        public void Reset()
        {
            this.underlyingEnumerator.Reset(); 
        }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读