我有一个用于将用户数据存储到文件的类。它运行良好,但不能轻易放入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通过使用注入的接口访问该类。
答案 0 :(得分:0)
您正在定义扩展方法,您需要一个类的实例来调用它们:
var o = new Object();
string rv = (string)o.GetPropertyValue(valToGet);
// or, but no sure
string rv = (string)UserData.GetPropertyValue(o, valToGet);
或更多可能在您的情况下:
public string GetStringValue(string valToGet)
{
string rv = (string)this.GetPropertyValue(this, valToGet);
//or
//string rv = (string)UserData.GetPropertyValue(this, valToGet);
return rv;
}
答案 1 :(得分:0)
我认为你在UserData类和对象类之间感到困惑。您的扩展方法扩展了对象。