List.Contains(mystring)是否进行引用比较或值比较?我有这个代码:
/// <summary>
/// If the value isn't null or an empty string,
/// and doesn't exist in the list, it adds it to the list
/// </summary>
static void AddToListIfNotEmpty(List<string> thelist, SqlString val)
{
string value = val.ToString().Trim();
if (!string.IsNullOrEmpty(value))
{
bool found = false;
foreach (string x in thelist) if (x == value) found = true;
if (!found) thelist.Add(value);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以简化foreach和以下行:
if (!thelist.Contains(value)) thelist.Add(value);
Run Code Online (Sandbox Code Playgroud)
谢谢
IList<T>用于Comparator<T>.Default进行比较,然后按String对象的值进行比较.
如果您愿意,可以将项目移动到IDictionary<T, bool>类似的东西,您可以在其中指定IComparator- 指定检查参考的项目.(即使在那种情况下,你最好使用foreach循环)
如果你可以使用LINQ,你也可以在那里创建一个带有引用比较的语句.
来自MSDN的List<T>.Contains
EqualityComparer<T>.Default此方法使用T(列表中值的类型)的默认相等比较器来确定相等性 。... Default 属性检查类型 T 是否实现
IEquatable<T>通用接口,如果是,则返回EqualityComparer<T>使用该实现的类型。否则,它返回一个 使用和 提供的EqualityComparer<T>覆盖的。Object.EqualsObject.GetHashCodeT
看看反射器(并按照最小惊喜原则),字符串相等具有值类型语义 - 因此如果它们具有相同的字符串,则它们相等。两者Equals(Object)都IEquatable.Equals(T)委托给String::EqualsHelper
| 归档时间: |
|
| 查看次数: |
7032 次 |
| 最近记录: |