Enumerable.First (System.Linq) C# 的替代方案
Posted
技术标签:
【中文标题】Enumerable.First (System.Linq) C# 的替代方案【英文标题】:an alternative to Enumerable.First (System.Linq) C# 【发布时间】:2016-12-20 06:12:29 【问题描述】:我在 .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)。如何维护在我的代码中找到 here 的 Enumerable.First Method (IEnumerable, Func) 的功能?
完整来源file
【问题讨论】:
什么是命名空间?这里没有同名的变量 @Steve,有一个public static readonly List<KeyValuePair<string, string>> Namespaces
@Rahul 我现在看到了,但我的借口是,如果您查看发布的链接中的源代码,事情会变得非常混乱。
@Steve,哈哈,你真的浏览过那个源代码链接吗:)
【参考方案1】:
您可能可以使用foreach
循环
foreach(var item in Namespaces)
if(item.Value == _namespace)
return item.Key + ":" + _name;
【讨论】:
感谢您的帮助!【参考方案2】:您可以按如下方式创建 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");
【讨论】:
【参考方案3】:它并不是Enumerable.First
的真正替代品,但由于您实际上有一个List<T>
变量,您可以考虑Find
方法。签名与Enumerable.First
兼容,但请注意,该行为与Enumerable.FirstOrDefault
兼容,即如果元素不存在,您将获得NRE 而不是“序列不包含匹配元素”。
return Namespaces.Find(x => x.Value == _namespace).Key + ":" + _name;
【讨论】:
我也喜欢你的回答。以上是关于Enumerable.First (System.Linq) C# 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章
从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换
获取 System.Collections.Generic.List1[System.Collections.Generic.KeyValuePair2[System.Int32,System.Str
System.TypeLoadException:“无法从程序集“System.Web”加载类型“System.Web.HttpContextBase”,
java中System.out.print()与System.out.println()与System.out.printf()的差别
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.
从 System.Collections.Generic.Dictionary`2[System.Object,System.Object] 读取数据