سؤال

أنا باستخدام أدناه بيان بقصد الحصول على كل من آلة الكائنات من MachineList جمع (نوع IEnumerable) أن يكون MachineStatus من أنا.على MachineList مجموعة لا تحتوي دائما على الآلات مع حالة أنا.

في بعض الأحيان عندما لا الآلات لديها MachineStatus من أنا أود العودة فارغة جمع.ندائي ActiveMachines (الذي يستخدم الأولى) يعمل ولكن InactiveMachines لا.

public IEnumerable<Machine> ActiveMachines
{
    get
    {
        return Customer.MachineList
            .Where(m => m.MachineStatus == "a");
    }
}

public IEnumerable<Machine> InactiveMachines
{
    get
    {
        return Customer.MachineList
            .Where(m => m.MachineStatus == "i");
    }
}

تحرير

بناء على دراسة أخرى يبدو أن أي تعداد MachineList سوف يسبب اللاحقة والتعدادات من MachineList لرمي exeception: Object reference not set to an instance of an object.

لذلك لا يهم إذا كان يتم إجراء مكالمة إلى ActiveMachines أو InactiveMachines كما لها مشكلة مع MachineList جمع.هذا هو مزعج ولا سيما لأنه لا يمكن كسر المكالمات MachineList ببساطة عن طريق تعداد في ساعة قبل أن يطلق عليه في التعليمات البرمجية.في أدنى مستوى له MachineList تنفذ NHibernate.IQuery كونه عاد كما IEnumerable.ما تسبب MachineList تفقد محتوياتها بعد أولية التعداد?

هل كانت مفيدة؟

المحلول

Where ترجع فارغة تسلسل إذا كان هناك أي المباريات ؛ هذا هو تماما صالحة تسلسل (not null).الطريقة الوحيدة التي سوف تحصل على باطل هو إذا كنت الاتصال FirstOrDefault أو SingleOrDefault.

هل أنت متأكد من الشوائب حيث كنت أعتقد أنه هو ؟

int?[] nums = { 1, 3, 5 };
var qry = nums.Where(i => i % 2 == 0);
Console.WriteLine(qry == null); // false
Console.WriteLine(qry.Count()); // 0
var list = qry.ToList();
Console.WriteLine(list.Count); // 0
var first = qry.FirstOrDefault();
Console.WriteLine(first == null); // true

نصائح أخرى

بشكل افتراضي ، Enumerable.حيث بالفعل لا تعود فارغة IEnumerable<T>, وليس null.إذا كنت ترى "كائن مرجع لم يتم تعيينها إلى مثيل الكائن." استثناءات ، فمن الأرجح أن شيئا آخر هو المشكلة.

هو MachineList null, ربما ؟ إذا لم أكن قد خلقت لك الحصول على هذا الاستثناء على الاتصال الخاص بك إلى .Where(...)

بالإضافة إلى ذلك, إذا كنت ترغب في صراحة العودة فارغة جمع هذا يمكن أن تساعد في...

Enumerable.Empty<Machine>();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top