我怀疑它会产生很大的不同,但你可以做一些时间测试来找出答案。
您可以为缓存哈希码的 String 编写一个简单的不可变包装类,并将其用作键类型,例如:
public sealed class StringKey: IEquatable<StringKey>
{
public StringKey(string key)
{
Contract.Requires(key != null);
_key = key;
_hashCode = key.GetHashCode();
}
public override int GetHashCode()
{
return _hashCode;
}
public bool Equals(StringKey other)
{
if (ReferenceEquals(null, other))
return false;
if (ReferenceEquals(this, other))
return true;
return (_hashCode == other._hashCode) && string.Equals(_key, other._key);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(this, obj))
return true;
return obj is StringKey && Equals((StringKey) obj);
}
public string Key
{
get
{
return _key;
}
}
private readonly string _key;
private readonly int _hashCode;
}
但是,就像我说的那样,我怀疑这会产生很大的不同。