I am working on Unity C# and trying to make my own Serializable Dictionary to use with ScriptableObject s. I am using a generic method and a generic indexed class to do that. I have an Add function that takes in a Key and a Value, both of any data type, quite similar to C# Dictionary. I have also created my own KeyValuePair class to go with it.
However, whenever I pass in a List as a Value it is received as a reference of course. But I want to receive some of the reference based Types & Data Types as a Value only. In a non-generic method I can simply create a new list out of it as soon as I would received it but apparently I can't do that with a generic method.
public bool Add(in S Key, in T Value)
{
    // Apparently I can't do this here:
    
    // T ReceivedValue = new T(Value);
    for (int i = 0; i < KeyValuePairs.Count; i++)
    {
        if (KeyValuePairs[i].Key.Equals(Key))
        {
            Debug.LogError("Key '" + Key + "' already exists in the AMADictionary.");
            return false;
        }
    }
    KeyValuePairs.Add(new AMAKeyValuePair<S, T>(Key, Value));
    return true;
}
To achieve this I always have to do this process in the parenthesis while calling the Add method which is slow and always one extra thing to keep in mind. Is there a way I can achieve this within the method?
Thanks everyone!
 
     
    