One way (that i wouldn't use) is to provide an implicit conversion from string to Perfume:
public static implicit operator Perfume(string aroma)
{
return new Perfume { Aroma = aroma };
}
Then this works:
Perfume perfume = new Perfume();
perfume = "aroma";
But it needs to create a new object which is rarely desired since it deletes all other properties and also makes the code less readable (the first line is pointless since it creates a throwaway-Perfume).
As an aside, normally an Aroma would also be a class with properties instead of a string. Another way is to provide an enum of available aromas. That increases readability and makes the code more robust.
But maybe you are actually looking for a way to find your perfumes via aroma-name. Then a Dictionary<string, Perfume> (or Dictionary<Aroma, Perfume>, where Aroma is the enum) was more appropriate:
Dictionary<string, Perfume> allAromas = new Dictionary<string, Perfume>();
allAromas.Add("Musky", new Perfume{Aroma="Musky"});
allAromas.Add("Putrid", new Perfume{Aroma="Putrid"});
allAromas.Add("Pungent", new Perfume{Aroma="Pungent"});
allAromas.Add("Camphoraceous", new Perfume{Aroma="Camphoraceous"});
allAromas.Add("Pepperminty", new Perfume{Aroma="Pepperminty"});
Now you can access a perfume later very fast via aroma-name:
Perfume muskyPerfume = allAromas["Musky"];
Perfume:public static implicit operator Perfume(string aroma) { return new Perfume { Aroma = aroma }; }