public string Resolve()

in src/Elastic.Clients.Elasticsearch/_Shared/Core/Infer/Id/IdResolver.cs [40:78]


	public string Resolve<T>(T @object) =>
		_elasticsearchClientSettings.DefaultDisableIdInference || @object == null
			? null
			: Resolve(@object.GetType(), @object);

	public string Resolve(Type type, object @object)
	{
		if (type == null || @object == null)
			return null;
		if (_elasticsearchClientSettings.DefaultDisableIdInference ||
		    _elasticsearchClientSettings.DisableIdInference.Contains(type))
			return null;

		var preferLocal = _elasticsearchClientSettings.IdProperties.TryGetValue(type, out _);

		if (_localIdDelegates.TryGetValue(type, out var cachedLookup))
			return cachedLookup(@object);

		if (!preferLocal && IdDelegates.TryGetValue(type, out cachedLookup))
			return cachedLookup(@object);

		var idProperty = GetInferredId(type);
		if (idProperty == null)
			return null;

		var getMethod = idProperty.GetMethod;
		var generic = MakeDelegateMethodInfo.MakeGenericMethod(type, getMethod.ReturnType);
		var func = (Func<object, object>)generic.Invoke(null, new object[] {getMethod});
		cachedLookup = o =>
		{
			var v = func(o);
			return (v is IFormattable f) ? f.ToString(null, CultureInfo.InvariantCulture) : v?.ToString();
		};
		if (preferLocal)
			_localIdDelegates.TryAdd(type, cachedLookup);
		else
			IdDelegates.TryAdd(type, cachedLookup);
		return cachedLookup(@object);
	}