List.Contains(mystring)做參考比較還是比較值? 例如,我有這樣的代碼:列表<String> .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);
}
}
我能簡化的foreach及以下線路:
if (!thelist.Contains(value)) thelist.Add(value);
感謝
通過參考進行比較是沒有意義的。 「SqlString」引用沒有辦法和列表中的「string」一樣嗎? – Thorarin 2009-08-12 05:10:42
你是對的,我沒有注意到。這可能會使Equals方法也返回false。 在這種情況下,使用IDictionary技巧或LINQ是他的選擇, – 2009-08-12 05:19:05
等等,我感到困惑了一下。他正在比較ToString()。Trim()值,而不是SqlString本身。 Equals可能工作,甚至可以在字符串被執行時進行參考比較。 – 2009-08-12 05:20:07