条件返回的类型不同于定义的泛型类型

时间:2014-02-26 09:30:56

标签: c# generics

我正在尝试使用通用方法。但是一个特定类型的对象存在一些问题,因此对于那种特定类型,但由于类型不匹配而导致错误。我怎么能纠正这个?

private static T GetObjectFromFile<T>(string filename)
        {
            IsolatedStorageFile AppIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
            IsolatedStorageFileStream ISFileStream = AppIsolatedStorage.OpenFile(filename, System.IO.FileMode.Open);
            byte[] buffer = new byte[ISFileStream.Length];
            ISFileStream.Read(buffer, 0, buffer.Length);
            ISFileStream.Close();
            string data = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
            if (typeof(T) == typeof(MonitorBriefs))
            {
                return JsonParser.ParseMonitorBrief(data);//this is incorrect statement
            }
            else
            {
                return JsonConvert.DeserializeObject<T>(data);
            }
        }

2 个答案:

答案 0 :(得分:0)

不太好但是试试这个:

private static T GetObjectFromFile<T>(string filename)
    {
        IsolatedStorageFile AppIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
        IsolatedStorageFileStream ISFileStream = AppIsolatedStorage.OpenFile(filename, System.IO.FileMode.Open);
        byte[] buffer = new byte[ISFileStream.Length];
        ISFileStream.Read(buffer, 0, buffer.Length);
        ISFileStream.Close();
        string data = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
        if (typeof(T) == typeof(MonitorBriefs))
        {
            return (T)(object)JsonParser.ParseMonitorBrief(data);//this is incorrect statement
        }
        else
        {
            return JsonConvert.DeserializeObject<T>(data);
        }
    }

答案 1 :(得分:0)

不幸的是,.NET无法实现。您可以删除在此方法之外移动if语句并将返回类型设置为T.或者使用包装器对象,您可以在其中设置两种类型并返回该类型。

将它转换为对象不应该是一个选项,因为你需要将它强制转换回调用方法的代码