如何将此var传递给函数

时间:2015-01-19 11:20:30

标签: c# function windows-phone-8.1 ienumerable var

此方法生成var结果:

private void GraphApi_Facebook()
{
    var fb = new FacebookClient(_accessToken);
    fb.GetCompleted += (o, e) =>
    {   if (e.Error != null)
        {                 
            return;
        }

        var result = (IDictionary<string, object>)e.GetResultData();        
        SaveDataToClass(result); // >>> This is wrong           
    }
}   

如何将结果传递给SaveDataToClass()?

private async void SaveDataToClass()
{
    CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => {

        singletonInstance.facebook_name = (string)result["name"];
        singletonInstance.facebook_firstname = (string)result["first_name"];        
    });
}

3 个答案:

答案 0 :(得分:3)

var不是类型。根据您的代码,结果类型为IDictionary<string, object>,因此您只需在类型{{1}的方法中添加参数}}

答案 1 :(得分:1)

您必须将SaveDataToClass方法的签名更改为以下内容:

private async void SaveDataToClass(IDictionary<string, object> dictionary)

然后你可以传递result,因为它的类型是IDictionary<string, object>

注意

正如Selman22所指出的那样,var不是一种类型。这是一种语法糖。编译代码时,结果类型为IDictionary<string, object>

而不是写这个:

IDictionary<string, object> result = (IDictionary<string, object>)e.GetResultData();

你有能力写这个:

var result = (IDictionary<string, object>)e.GetResultData();

在编译期间,result的类型将由您指定的值的类型推断。

答案 2 :(得分:0)

更改SaveDataToClass的签名以接受&#39;结果的类型&#39;:

private async void SaveDataToClass(IDictionary<string, object> result)
{
    . . . 
}