我也更喜欢工厂模式。但是当我必须在外面创建一对时,我发现这种方式更有用。这样我就可以支持任何简单到复杂的用例。
这样,我可以使用任何类型并根据其属性或任何我想要的谓词制作 KeyValue Pairs,但更干净。喜欢的方式类似IEnumerable.ToDictionary(keySelector,valueSelector)
public static KeyValuePair<TKey, TValue> CreatePair<TSource, TKey, TValue>(
this TSource source,
Func<TSource, TKey> keySelector,
Func<TSource, TValue> valueSelector)
{
if (source is null)
{
throw new ArgumentNullException(nameof(source));
}
if (keySelector is null)
{
throw new ArgumentNullException(nameof(keySelector));
}
if (valueSelector is null)
{
throw new ArgumentNullException(nameof(valueSelector));
}
return new KeyValuePair<TKey, TValue>(
keySelector.Invoke(source),
valueSelector.Invoke(source));
}
而你使用。
yourObject.CreatePair(
x=> x.yourKeyPropery,
x=> SomeOperationOnYourProperty(x.yourValueProperty));