Jim*_* G. 1 .net dictionary syntactic-sugar c#-3.0
请考虑以下代码,其中每个键具有相同的值:
IDictionary<string, string> quarterbackDictionary = new Dictionary<string, string>();
quarterbackDictionary.Add("Manning", "Manning");
quarterbackDictionary.Add("Brady", "Brady");
quarterbackDictionary.Add("Rivers", "Rivers");
Run Code Online (Sandbox Code Playgroud)
我的问题:
- 我可以删除冗余,这样我就不必重复每个字符串两次,类似于以下内容:
IDictionary<string, string> quarterbackDictionary = new Dictionary<string, string>();
quarterbackDictionary.Add("Manning");
quarterbackDictionary.Add("Brady");
quarterbackDictionary.Add("Rivers");
Run Code Online (Sandbox Code Playgroud)
供参考:
dri*_*iis 11
您可以在自己的类中包装HashSet <string>,如果您尝试两次添加相同的键,则会抛出异常.
定义该类不会有太大麻烦,事实上,这是一个可以调整以满足您需求的可能实现:
public class UniqueHashSet<T> : ICollection<T>
{
private readonly HashSet<T> innerSet = new HashSet<T>();
public void Add(T item)
{
if (innerSet.Contains(item))
throw new ArgumentException("Element already exists", "item");
innerSet.Add(item);
}
public void Clear()
{
innerSet.Clear();
}
public bool Contains(T item)
{
return innerSet.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
innerSet.CopyTo(array, arrayIndex);
}
public bool Remove(T item)
{
return innerSet.Remove(item);
}
public int Count
{
get { return innerSet.Count; }
}
public bool IsReadOnly
{
get { return false; }
}
public IEnumerator<T> GetEnumerator()
{
return innerSet.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return innerSet.GetEnumerator();
}
}
Run Code Online (Sandbox Code Playgroud)
正如其他答案所提到的,您也可以将其作为扩展方法.我认为你当然可以做到这一点,除非你需要绝对确定你不能两次添加相同的项目(如果你这样做的扩展方法方式,仍然可以调用常规.Add方法).
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |