2017-07-26 46 views
0

这里我有一个从json字符串获取库存的例子。不要返回错误,因为我期望为空

inventory = JsonUtility.FromJson<InventoryModel>GFile.GetPlayer(FileComponent.PlayerInventory));

由于我加载从文件中的字符串有可能它仅仅是空白,我想首先检查它是否是空白的,我会做这样的:

if(GFile.GetPlayer(FileComponent.PlayerInventory) != " ") 
{ 
    inventory = JsonUtility.FromJson<InventoryModel>(GFile.GetPlayer(FileComponent.PlayerInventory)); 
} 

所以我的问题是,如果有更好的方法来做到这一点,而不是像这样的陈述打字?

+0

赋给变量,并检查变量为空? – MistyK

+0

我认为你所做的事情已经足够好并且更容易理解了 –

+0

@AmrElgarhy:声明在这种情况下,GFile.GetPlayer(FileComponent.PlayerInventory)执行两次。如果文件很大,那么我们可以通过消除重复的读取文件来改善性能。 –

回答

2

我建议

string data = GFile.GetPlayer(FileComponent.PlayerInventory); 
if(!string.IsNullOrWhiteSpace(data)) 
{ 
    inventory = JsonUtility.FromJson<InventoryModel>(data); 
} 

这样,你只能叫GetPlayer一次,如果所得到的数据是空字符串或者是全空白没关系 - 它还是赢了没有进入该块并设置库存。

编辑

对于旧版本的.Net,这也将工作

string data = GFile.GetPlayer(FileComponent.PlayerInventory); 
if(data != null && data.Trim().Length == 0) 
{ 
    inventory = JsonUtility.FromJson<InventoryModel>(data); 
} 
+0

对不起,我在完成之前意外地提交了它。这将只运行一次GetPlayer。 –

+0

你在.Net 4.0或更高版本?如果没有,给我一秒钟,我会更新我的答案更低版本的。净 –

+0

由于某种原因,我不能看到函数'IsNullOrWhiteSpaced' –

3

为什么不能这样? :

var player = GFile.GetPlayer(FileComponent.PlayerInventory); 
if(!string.IsNullOrWhiteSpace(player)) { 
    inventory = JsonUtility.FromJson<InventoryModel>(player); 
} 
+0

不是最好先检查文件内容,只有当它不为空或空时才将它传递给jsonutility? –

+0

我不能在库存分配该值,它会降低Json为空的错误 –

+1

我期望'var myTempVar = GFile.GetPlayer(FileComponent.PlayerInventory);'然后'inventory = JsonUtility.FromJson (myTempVar );来自OP的描述。注意他的“if”块如何评估与稍后分配给“inventory”的值不同的值。 – Flater

相关问题