Проигнорируйте NullReferenceException при чтении свойств объектов

Итак, по сути, у вас есть массив с динамическим размером, скажем: ["1", "2", "3", "4", "5"]. Что вы действительно хотите сделать, так это каким-то образом иметь массив, который содержит один или несколько массивов из N значений, например: [["1", "2", "3"], ["4", "5"]].

Для этого вы можете использовать этот фрагмент:

function groupArray<T>(data: Array<T>, n: number): Array<T[]> {
    let group = new Array<T[]>();
​
    for (let i = 0, j = 0; i < data.length; i++) {
        if (i >= n && i % n === 0)
            j++;
        group[j] = group[j] || [];
        group[j].push(data[i])
    }
​
    return group;
}

Теперь, чтобы использовать его, просто назовите его так:

var arrayOfData: string[] = ["1", "2", "3", "4", "5"];
var group = groupArray(arrayOfData, 3);

console.log(group); // displays: ["1", "2", "3"], ["4", "5"]

В угловом вы можете теперь, создайте *ngFor в массиве group для построения строк, а затем еще один *ngFor для построения столбцов. Будьте внимательны при последнем рассмотрении массива, у вас может не быть правильной длины в зависимости от размера исходного массива. Вам нужно будет «заполнить» последний массив пустыми значениями или чем угодно.

Надеюсь, это поможет.

5
задан usman shaheen 14 December 2008 в 11:15
поделиться

5 ответов

теперь я использую обработка NullReferenceException и делегат

public delegate string SD();//declare before class definition

string X = GetValue(() => Message.instance[0].prop1.prop2.ID); //usage

//GetValue defintion
private string GetValue(SD d){
        try
        {
            return d();
        }
        catch (NullReferenceException) {
            return "";
        }

    }

Благодаря выгоде Попытки каждая строка кода без отдельных блоков try-catch для идеи

1
ответ дан 13 December 2019 в 19:38
поделиться

Короче говоря: нет. Пустая проверка ссылка прежде, чем попытаться использовать его. Один полезный прием здесь мог бы быть методами расширения C# 3.0... они позволяют Вам, казаться, вызвать что-то на нулевую ссылку без ошибки:

string foo = null;
foo.Spooky();
...
public static void Spooky(this string bar) {
    Console.WriteLine("boo!");
}

Кроме этого - возможно, некоторое использование условного оператора?

string name = obj == null ? "" : obj.Name;
6
ответ дан 13 December 2019 в 19:38
поделиться

Тернарный оператор и/или?? оператор может быть полезным.

Скажите, что Вы пытаетесь получить значение myItem. MyProperty. GetValue (), и MyProperty мог быть пустым, и Вы хотите принять значение по умолчанию пустая строка:

string str = myItem.MyProperty == null ? "" : myItem.MyProperty.GetValue();

Или в случае, где возвращаемое значение GetValue является пустым, но Вы хотите принять значение по умолчанию к чему-то:

string str = myItem.MyProperty.GetValue() ?? "<Unknown>";

Это может быть объединено к:

string str = myItem.MyProperty == null 
    ? "" 
    : (myItem.MyProperty.GetValue()  ?? "<Unknown>");
4
ответ дан 13 December 2019 в 19:38
поделиться
try
{
   // exceptions thrown here...
}
catch (NullReferenceException) { }
0
ответ дан 13 December 2019 в 19:38
поделиться

Я пошел бы со вспомогательным методом. На Ошибочном Резюме Затем просто приводит к безумию.

0
ответ дан 13 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: