Большой разницы нет. Возвращаемое перечисление повторяется один раз для каждого экземпляра службы.
Здесь приведен код, взятый из источников на GitHub .
if (this.instanceListeners == null)
{
this.instanceListeners = this.userServiceInstance.CreateServiceInstanceListeners();
}
var endpointsCollection = new ServiceEndpointCollection();
var listenerOpenedCount = 0;
foreach (var entry in this.instanceListeners)
{
var communicationListener = entry.CreateCommunicationListener(this.serviceContext);
this.AddCommunicationListener(communicationListener);
var endpointAddress = await communicationListener.OpenAsync(cancellationToken);
endpointsCollection.AddEndpoint(entry.Name, endpointAddress);
listenerOpenedCount++;
var traceMsg = entry.Name.Equals(ServiceInstanceListener.DefaultName)
? "Opened communication listener with default name."
: $"Opened communication listener with name {entry.Name}.";
ServiceTrace.Source.WriteInfoWithId(TraceType, this.traceId, traceMsg);
}
Вы пробовали что-то вроде этого?
public class Example<TValue>
{
private TValue _value;
public TValue Value
{
get { return _value; }
set
{
if (!object.Equals(_value, value))
{
_value = value;
OnPropertyChanged("Value");
}
}
}
}
Действительно ли IComparable является опцией?
public class Example<TValue> where TValue: IComparable
{
private TValue _value;
public TValue Value
{
get { return _value; }
set
{
if (_value.CompareTo(value) != 0)
{
_value = value;
OnPropertyChanged("Value");
}
}
}
}
Три опции:
IEquatable<TValue>
и затем звоните x.Equals(y)
IEqualityComparer<TValue>
и используйте этоEqualityComparer<TValue>.Default
выполнить сравненияВы могли всегда смешивать и соответствовать опциям 2 и 3, конечно - значение по умолчанию к компаратору по умолчанию, но также и позволять определенному быть обеспеченным.
Я думаю !=
оператор не может быть применен здесь, потому что существуют случаи, где он не может использоваться. Например, !=
не может использоваться для сравнения структур, если сравнить операторы (==
!=
) перегружаются.
Конечно, можно сравнить структуры языка, как int != int
, но я не уверен, как это реализовано.
Так, потому что TValue может быть пользовательской структурой, он не может использовать !=
оператор.