2012-02-23 2 views
0

У меня есть файл XML:C# MVC XML Record Value

<profiles> 
    <profile username="user4" fullname="Full Name" /> 
</profiles> 

Я пытаюсь retrive значение FULLNAME, вот что я пробовал:

public List<string> GetFullName(string username) 
{ 
    List<Profile> list = null; 
    try 
    { 
     list = (from t in ProfileList 
       where t.UserName == username 
       select t).FirstOrDefault(); 
    } 
    catch { } 
    List<string> userFullName = new List<string>(); 
    if (list != null) 
    { 
     foreach (Profile t in list) 
     { 
      userFullName.Find(t.FullName); 
     } 
    } 
    return userFullName; 
} 

FirstOrDefault выдает ошибку!
Спасибо заранее.

+0

Чувак, вы знаете, что у вас есть глобальные переменные в вашем коде? Кроме того, как и компилятор, мы не можем вывести тип ProfileList. – linkerro

+0

'FirstOrDefault дает ошибку' Это все? Что такое «ProfileList»? какую ошибку вы точно получаете? –

+0

@linkerro На самом деле тип 'ProfileList' может быть выведен нами. Он должен быть 'IEnumerable ' где 'T' имеет свойства' UserName' и 'FullName'.)) – Oybek

ответ

1

Я предпочел бы переписать код, как этот

public String GetFullName(string username) 
    { 
     var targetObject = (from t in ProfileList 
        where t.UserName == username 
        select t).FirstOrDefault(); 

     if (targetObject != null) return targetObject.FullName; 
     throw new Exception("Target user is not found"); 
    } 
+0

Большое вам спасибо – hncl

2

FirstOrDefault() является extension method, что означает, что она в основном аналогична концепции, чтобы делать что-то вроде

var myList = new List<int>() { }; 
int myValue = StaticUtilsClass.FirstOrDefault(myList); 

Теперь, если вы посмотрите на FirstOrDefault documentation, обратите внимание, что при выдаче нулевого параметра он генерирует исключение с помощью null аргумента.

Что это означает, что

List<int> myList = null; 
myList.FirstOrDefault(); 

сгенерирует исключение.

Итак, в любое время вы вызываете x.FirstOrDefault() и сталкиваетесь с проблемой (то есть с «ошибкой»), первое, что нужно проверить, - это то, возвращает ли x в этом случае ваш запрос.

Оттуда я хотел бы взглянуть на то, что FirstOrDefault() собирается вернуть единое целое, но вы устанавливаете его равным List<Profile>. Если ваш ProfileList не является перечислением List<Profile>, это тоже будет проблемой.

Это должно заставить вас начать все равно. Помимо этого, было бы полезно узнать, что такое ProfileList и где он объявлен.