.net 3.5 - Enumerable的替代品.首先(System.Linq) c#

本文关键字:System Linq 首先 替代品 Enumerable net | 更新日期: 2023-09-27 18:02:12

我有这段代码运行在。net 3.5

public const string SvgNamespace = "http://www.w3.org/2000/svg";
public const string XLinkPrefix = "xlink";
public const string XLinkNamespace = "http://www.w3.org/1999/xlink";
public const string XmlNamespace = "http://www.w3.org/XML/1998/namespace";
public static readonly List<KeyValuePair<string, string>> Namespaces = new List<KeyValuePair<string, string>>()
{
    new KeyValuePair<string, string>("", SvgNamespace),
    new KeyValuePair<string, string>(XLinkPrefix, XLinkNamespace),
    new KeyValuePair<string, string>("xml", XmlNamespace)
};
private bool _inAttrDictionary;
private string _name;
private string _namespace;
public string NamespaceAndName
        {
            get
            {
                if (_namespace == SvgNamespace)
                    return _name;
                return Namespaces.First(x => x.Value == _namespace).Key + ":" + _name;
            }
        }

,我目前正在转换为。net 2.0(删除System.Linq)。如何维护Enumerable的功能?第一个方法(IEnumerable, Func)在我的代码中找到吗?

完整的源文件

.net 3.5 - Enumerable的替代品.首先(System.Linq) c#

您可以使用像

这样的foreach循环
foreach(var item in Namespaces)
{
  if(item.Value == _namespace)
    return item.Key + ":" + _name;
}

您可以创建GetFirst方法如下:

    public string NamespaceAndName
    {
        get
        {
            if (_namespace == SvgNamespace)
                return _name;
            return GetFirst(Namespaces, _namespace).Key + ":" + _name;
        }
    }
    private KeyValuePair<string, string> GetFirst(List<KeyValuePair<string,string>> namespaces,string yourNamespaceToMatch)
    {
        for (int i = 0; i < namespaces.Count; i++)
        {
            if (namespaces[i].Value == yourNamespaceToMatch)
                return namespaces[i];
        }
        throw new InvalidOperationException("Sequence contains no matching element");
    }

这不是Enumerable.First的真正替代品,但由于您实际上有List<T>变量,因此您可以考虑Find方法。签名与Enumerable.First兼容,但注意行为与Enumerable.FirstOrDefault兼容,即如果元素不存在,您将获得NRE而不是"序列不包含匹配元素"。

return Namespaces.Find(x => x.Value == _namespace).Key + ":" + _name;