У меня есть класс, который используется для хранения пользовательских данных в файле. Он хорошо работает, но не может быть легко помещен в библиотеку PCL. Вне PCL все в порядке.Получение значений свойств из статического класса с использованием отражения
Класс выглядит следующим образом
public static class UserData
{
public static object GetPropertyValue(this object data, string propertyName)
{
return data.GetType().GetProperties().Single(pi => pi.Name == propertyName).GetValue(data, null);
}
public static object SetPropertyValue<T>(this object data, string propertyName, T value)
{
data.GetType().GetProperties().Single(pi => pi.Name == propertyName).SetValue(data, value);
return new object();
}
private static string pUserSettingsFile;
private static UserSettings userSetting;
public static bool AccountEnabled
{
get
{
return UserSettings.account_enabled;
}
set
{
UserSettings settings = UserSettings;
settings.account_enabled = value;
UserSettings = settings;
}
}
public static UserSettings UserSettings
{
get
{
if (userSetting == null)
{
if (File.Exists(UserSettingsFile))
{
userSetting = Serializer.XmlDeserializeObject<UserSettings>(UserSettingsFile);
}
else
{
userSetting = new UserSettings();
Serializer.XmlSerializeObject(userSetting, UserSettingsFile);
}
}
return userSetting;
}
set
{
if (value == null)
{
throw new ArgumentNullException("value is null!");
}
userSetting = value;
if (File.Exists(UserSettingsFile))
{
File.Delete(UserSettingsFile);
}
Serializer.XmlSerializeObject(userSetting, UserSettingsFile);
}
}
public static string UserSettingsFile
{
get
{
if (string.IsNullOrEmpty(pUserSettingsFile))
{
pUserSettingsFile = Path.Combine(GroupShootDroid.Singleton.ContentDirectory, "UserSettings.xml");
}
return pUserSettingsFile;
}
}
#endregion
}
public class UserSettings
{
public bool account_enabled { get; set; }
public string address { get; set; }
public string country { get; set; }
}
Это не ракетостроение, но делает то, что мне нужно это делать.
Что я пытаюсь сделать, это использовать методы Get/SetPropertyValue для возврата или установки каких-либо свойств внутри класса.
В настоящее время, чтобы получить доступ к методам Get/SetPropertyValue Я использую этот
public string GetStringValue(string valToGet)
{
string rv = (string)UserData.GetPropertyValue(valToGet);
return rv;
}
public void SetStringValue(string name, string val)
{
UserData.SetPropertyValue(name, val);
}
На компиляции, хотя, метод GetPropertyValue
дает ошибку, No overload for method GetPropertyValue takes 1 argument
с SetPropertyValue
жалуясь, что не перегруженный занимает 2
Я не уверен, что код, который я использую, будет делать то, что мне нужно от него (от того, что я читал здесь, должно быть), но я более озадачен, почему отображаются ошибки.
Есть ли лучший способ сделать то, что я пытаюсь сделать? Приложение представляет собой приложение Xam.Forms, поэтому PCL обращается к классу через интерфейс с помощью инъекции.
Какая часть сообщения об ошибке вы не понимаете? Ваши методы принимают два/три аргумента. – SLaks