通用方法中的"使用未分配的局部变量"

Eva*_*sen 6 c# generics

使用未分配的局部变量'model'.我收到了什么错误信息.它就在我说if(model == null)的地方.我不知道为什么它给我一个编译时错误..有人请帮助.

public static T TryGet<T>(string fileName) where T : new()
{
    T model;
    using (var storageFile = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Open, storageFile))
        {
            if (stream.Length > 0)
            {
                var serializer = new DataContractSerializer(typeof(T));
                model = (T)serializer.ReadObject(stream);
            }
        }
    }
    if (model == null)
    {
        model = new T();
    }
    return model;
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 15

正如错误所述,在编译器可以证明它已被赋值之前,您不能使用局部变量.

在您的情况下,如果您的if条件为false,model则永远不会分配变量.

您可以通过首先为其分配初始值来解决问题:

T model = default(T);
Run Code Online (Sandbox Code Playgroud)

请注意,如果T是结构类型,model == null则永远不会为真.

您应该将代码更改为

using (var storageFile = IsolatedStorageFile.GetUserStoreForApplication())
using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Open, storageFile))
{
    if (stream.Length > 0)
    {
        var serializer = new DataContractSerializer(typeof(T));
        return (T)serializer.ReadObject(stream);
    } 
    else 
    {
        return new T();
    }
}
Run Code Online (Sandbox Code Playgroud)