1

次のコードに問題があります。Facebook c#SDKを使用します。問題は、友達全員の職歴のリストをプルして印刷していることです。ただし、このデータが利用できない場合は、NullReferenceExceptionが発生していると思います。私はオンラインでたくさんの解決策を見てきましたが、うまくいくように見える解決策を見つけられませんでした。どんな助けでもいただければ幸いです。

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var accessToken = "...";
        var client = new FacebookClient(accessToken);
        dynamic myInfo = client.Get("me/friends", new { fields = "name,id,work" });

        foreach (dynamic friend in myInfo)
        {
            foreach (dynamic work in myInfo.work) // <---- here
            {
                Response.Write("Employer: " + work.employer.name + "<br/> Position:" + work.position.name + "<br/><br/>");
            }
        }
    }
}

提案された編集を含めましたが、別のエラーが発生しています。

    namespace WebApplication1.Site
 {
public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {


        var accessToken = "xxx";
        var client = new FacebookClient(accessToken);
        dynamic myInfo = client.Get("me/friends", new { fields = "name,id,work" });

        foreach (dynamic friend in myInfo)
        {
            **foreach (dynamic work in friend.work ?? new[] { new { employer = new { name = string.Empty }, position = new { name = string.Empty } } })**
                {
                    Response.Write("Employer: " + myInfo.work.employer.name);
                }

        }


    }
}
}

'System.Collections.Generic.KeyValuePair'には、21行目の'work'の定義が含まれていません

4

3 に答える 3

1

null 参照例外を回避するために、null 値の代わりに空のリストを提供できます。

 foreach (dynamic work in friend.work ?? new List<string>())

foreach が null 値で .GetEnumerator() を呼び出すため、例外が発生しています。新しいリストを使用しましたが、null ではなく、列挙可能である限り、ここに何を入れても問題ありません。

編集

必要なプロパティを提供する匿名型を提供できます。

 foreach (dynamic work in friend.work ?? new [] { new { employer = new { name = string.Empty}, position = new { name = string.Empty }}})
于 2012-08-03T19:15:26.300 に答える
0

内部ループを開始する前に、myInfo.work の null をテストするだけです。

if (myInfo.work != null) {
   foreach (dynamic work in myInfo.work)

また、間違ったオブジェクトを使用している可能性があることに気付きました:

if (friend.work != null) {
   foreach (dynamic work in friend.work)
于 2012-08-03T19:12:42.150 に答える
0

私は API に精通していませんが、内側のループでは、おそらく外側のループで作成されたオブジェクトのプロパティを反復処理することを意味していると思います。

例えば:

foreach (dynamic friend in myInfo)
{
    foreach (dynamic work in friend.work) // rather than myInfo.work
    {
        // ...
    }
}

また、null 参照の例外を防ぐために、内部ループの周りに null チェックを行う必要があります。

于 2012-08-03T19:15:06.190 に答える