preprocessor directives giving either error or warning

I’ve never really had a cause to use these before, so I may be missing something really simple. Hopefully I won’t be too embarrassed!

// This will not compile because FileLocation is already defined.
#if UNITY_EDITOR
private static string FileLocation { get { return Application.dataPath; } }
#endif
			
#if UNITY_STANDALONE	
private static string FileLocation { get { return Application.persistentDataPath; } }
#endif


// meanwhile, this gives an unreachable code warning on the latter return(s)
private static string FileLocation {	
	get {
		#if UNITY_EDITOR
			return Application.dataPath;
		#endif
		
		#if UNITY_STANDALONE
			return Application.persistentDataPath;
		#endif
		
		return Application.persistentDataPath;
	}
}

Can someone who knows what they’re doing tell suggest a warning-free approach to getting this behavior? And, since this is new territory for me, double-check my assumption that this is a cross-platform ironclad way to grab my game’s safe “save” directory?

As a bonus, how about the code below for cross-platform path composition? This okay too?

public static char DSep { get { return  System.IO.Path.DirectorySeparatorChar; } }

Big thanks for any assistance,

UNITY_EDITOR and UNITY_STANDALONE aren’t mutually exclusive. If you have the publishing platform switched to standalone, then both are true in the editor. Use #else instead of a second #if.