强制 Class 具有 .Parse 方法
Forcing a Class to have a .Parse Method
TLDR 问题:
如何将字符串转换为特定类型的对象?
长问题
我想制作一个 PlayerPrefs 包装器,我可以在其中存储我想要的任何数据。
所以是这样
void Set<T>(string Key, T Value)
{
PlayerPrefs.SetString(Key, Value.ToString());
}
T Get<T>(string Key)// where T : IParseable
{
//Code that checks for errors and throws exceptions
return T.Parse(PlayerPrefs.GetString(Key));
}
这里的问题是 "relies" 数据可解析(或实现我发明的 XD 的 IParseable)和原始数据类型没有实现它,即使它们都有 Parse
方法
是否已经有我可以使用的 IParseable
界面?
如果不是,有没有办法知道T类型是不是原始数据类型?
有没有更好的方法来实现我想做的事情?
如果我用JSON会不会更好?
评论是正确的,您不应该使用 ToString() 和 Parse。你正在做的(或试图做的)是序列化。这里有一些资源可用于确定如何序列化和反序列化您的数据:
- Serialize an object to string
- https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-serialize-and-deserialize-json-data
如果您使用上述示例之一,则应将数据序列化为人类可读的格式。它的效率较低,但序列化为字符串的效率已经低于序列化为字节的效率。如果您需要那种效率水平,则不应使用 PlayerPrefs。
TLDR 问题:
如何将字符串转换为特定类型的对象?
长问题
我想制作一个 PlayerPrefs 包装器,我可以在其中存储我想要的任何数据。
所以是这样
void Set<T>(string Key, T Value)
{
PlayerPrefs.SetString(Key, Value.ToString());
}
T Get<T>(string Key)// where T : IParseable
{
//Code that checks for errors and throws exceptions
return T.Parse(PlayerPrefs.GetString(Key));
}
这里的问题是 "relies" 数据可解析(或实现我发明的 XD 的 IParseable)和原始数据类型没有实现它,即使它们都有 Parse
方法
是否已经有我可以使用的
IParseable
界面?如果不是,有没有办法知道T类型是不是原始数据类型?
有没有更好的方法来实现我想做的事情?
如果我用JSON会不会更好?
评论是正确的,您不应该使用 ToString() 和 Parse。你正在做的(或试图做的)是序列化。这里有一些资源可用于确定如何序列化和反序列化您的数据:
- Serialize an object to string
- https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-serialize-and-deserialize-json-data
如果您使用上述示例之一,则应将数据序列化为人类可读的格式。它的效率较低,但序列化为字符串的效率已经低于序列化为字节的效率。如果您需要那种效率水平,则不应使用 PlayerPrefs。