IndexOutOfRangeException / ArgumentOutOfRangeException là gì và làm cách nào để khắc phục lỗi này?

197
Adriano Repetti 2014-01-06 14:19.

Tôi có một số mã và khi nó thực thi, nó ném ra IndexOutOfRangeException, nói rằng,

Chỉ mục nằm ngoài giới hạn của mảng.

Điều này có nghĩa là gì, và tôi có thể làm gì với nó?

Tùy thuộc vào các lớp được sử dụng, nó cũng có thể ArgumentOutOfRangeException

Một ngoại lệ của loại 'System.ArgumentOutOfRangeException' đã xảy ra trong mscorlib.dll nhưng không được xử lý trong mã người dùng Thông tin bổ sung: Chỉ mục nằm ngoài phạm vi. Phải không âm và nhỏ hơn kích thước của bộ sưu tập.

4 answers

238
Adriano Repetti 2014-01-06 14:19.

Nó là gì?

Ngoại lệ này có nghĩa là bạn đang cố gắng truy cập một mục bộ sưu tập theo chỉ mục, sử dụng một chỉ mục không hợp lệ. Chỉ mục không hợp lệ khi nó thấp hơn giới hạn dưới của bộ sưu tập hoặc lớn hơn hoặc bằng số phần tử mà nó chứa.

Khi nó được ném

Cho một mảng được khai báo là:

byte[] array = new byte[4];

Bạn có thể truy cập mảng này từ 0 đến 3, các giá trị nằm ngoài phạm vi này sẽ IndexOutOfRangeExceptionbị ném. Hãy nhớ điều này khi bạn tạo và truy cập một mảng.

Độ dài mảng
Trong C #, thông thường, mảng dựa trên 0. Nó có nghĩa là phần tử đầu tiên có chỉ số 0 và phần tử cuối cùng có chỉ mục Length - 1(trong đó Lengthlà tổng số mục trong mảng) vì vậy mã này không hoạt động:

array[array.Length] = 0;

Hơn nữa, xin lưu ý rằng nếu bạn có một mảng nhiều chiều thì bạn không thể sử dụng Array.Lengthcho cả hai thứ nguyên, bạn phải sử dụng Array.GetLength():

int[,] data = new int[10, 5];
for (int i=0; i < data.GetLength(0); ++i) {
    for (int j=0; j < data.GetLength(1); ++j) {
        data[i, j] = 1;
    }
}

Giới hạn trên không bao gồm
Trong ví dụ sau, chúng tôi tạo một mảng bidimensional thô của Color. Mỗi mục đại diện cho một pixel, các chỉ số từ (0, 0)đến (imageWidth - 1, imageHeight - 1).

Color[,] pixels = new Color[imageWidth, imageHeight];
for (int x = 0; x <= imageWidth; ++x) {
    for (int y = 0; y <= imageHeight; ++y) {
        pixels[x, y] = backgroundColor;
    }
}

Sau đó, mã này sẽ không thành công vì mảng dựa trên 0 và pixel cuối cùng (dưới cùng bên phải) trong hình ảnh là pixels[imageWidth - 1, imageHeight - 1]:

pixels[imageWidth, imageHeight] = Color.Black;

Trong một trường hợp khác, bạn có thể nhận được ArgumentOutOfRangeExceptionmã này (ví dụ: nếu bạn đang sử dụng GetPixelphương thức trên một Bitmaplớp).

Mảng không phát triển
Một mảng nhanh. Rất nhanh trong tìm kiếm tuyến tính so với mọi bộ sưu tập khác. Đó là bởi vì các mục nằm kề nhau trong bộ nhớ nên địa chỉ bộ nhớ có thể được tính toán (và gia số chỉ là một phép cộng). Không cần phải tuân theo danh sách nút, một phép toán đơn giản! Bạn phải trả khoản này với một hạn chế: chúng không thể phát triển, nếu bạn cần nhiều phần tử hơn, bạn cần phân bổ lại mảng đó (điều này có thể mất một thời gian tương đối nếu các mục cũ phải được sao chép sang một khối mới). Bạn thay đổi kích thước của chúng Array.Resize<T>(), ví dụ này thêm một mục nhập mới vào một mảng hiện có:

Array.Resize(ref array, array.Length + 1);

Đừng quên rằng các chỉ số hợp lệ là từ 0đến Length - 1. Nếu bạn chỉ cố gắng gán một mục Lengthmà bạn sẽ nhận được IndexOutOfRangeException(hành vi này có thể khiến bạn bối rối nếu bạn nghĩ rằng chúng có thể tăng lên với cú pháp tương tự như Insertphương thức của các bộ sưu tập khác).

Mảng đặc biệt với giới hạn dưới tùy chỉnh
Mục đầu tiên trong mảng luôn có chỉ mục 0 . Điều này không phải lúc nào cũng đúng vì bạn có thể tạo một mảng với giới hạn dưới tùy chỉnh:

var array = Array.CreateInstance(typeof(byte), new int[] { 4 }, new int[] { 1 });

Trong ví dụ đó, các chỉ số mảng có giá trị từ 1 đến 4. Tất nhiên, giới hạn trên không thể thay đổi.

Đối số sai
Nếu bạn truy cập một mảng bằng cách sử dụng các đối số chưa được kiểm chứng (từ đầu vào của người dùng hoặc từ người dùng hàm), bạn có thể gặp lỗi này:

private static string[] RomanNumbers =
    new string[] { "I", "II", "III", "IV", "V" };

public static string Romanize(int number)
{
    return RomanNumbers[number];
}

Kết quả không mong muốn
Ngoại lệ này cũng có thể bị ném ra vì một lý do khác: theo quy ước, nhiều hàm tìm kiếm sẽ trả về -1 (nullable đã được giới thiệu với .NET 2.0 và dù sao thì nó cũng là một quy ước nổi tiếng được sử dụng trong nhiều năm) nếu chúng không làm như vậy ' t tìm thấy bất cứ điều gì. Hãy tưởng tượng bạn có một mảng các đối tượng được so sánh với một chuỗi. Bạn có thể nghĩ để viết mã này:

// Items comparable with a string
Console.WriteLine("First item equals to 'Debug' is '{0}'.",
    myArray[Array.IndexOf(myArray, "Debug")]);

// Arbitrary objects
Console.WriteLine("First item equals to 'Debug' is '{0}'.",
    myArray[Array.FindIndex(myArray, x => x.Type == "Debug")]);

Điều này sẽ không thành công nếu không có mục nào trong myArraythỏa mãn điều kiện tìm kiếm vì Array.IndexOf()sẽ trả về -1 và sau đó quyền truy cập mảng sẽ ném.

Ví dụ tiếp theo là một ví dụ đơn giản để tính toán các lần xuất hiện của một tập hợp số nhất định (biết số tối đa và trả về một mảng trong đó mục ở chỉ số 0 đại diện cho số 0, các mục ở chỉ số 1 đại diện cho số 1, v.v.):

static int[] CountOccurences(int maximum, IEnumerable<int> numbers) {
    int[] result = new int[maximum + 1]; // Includes 0

    foreach (int number in numbers)
        ++result[number];

    return result;
}

Tất nhiên, đó là một triển khai khá khủng khiếp nhưng những gì tôi muốn hiển thị là nó sẽ thất bại đối với các số âm và số ở trên maximum.

Làm thế nào nó áp dụng cho List<T>?

Các trường hợp tương tự như mảng - phạm vi chỉ mục hợp lệ - 0 ( Listchỉ mục của luôn bắt đầu bằng 0) để list.Counttruy cập các phần tử bên ngoài phạm vi này sẽ gây ra ngoại lệ.

Lưu ý rằng List<T>ném ArgumentOutOfRangeExceptioncho các trường hợp tương tự mà các mảng sử dụng IndexOutOfRangeException.

Không giống như mảng, List<T>bắt đầu trống - vì vậy việc cố gắng truy cập các mục của danh sách vừa tạo sẽ dẫn đến ngoại lệ này.

var list = new List<int>();

Trường hợp phổ biến là điền danh sách với lập chỉ mục (tương tự như Dictionary<int, T>) sẽ gây ra ngoại lệ:

list[0] = 42; // exception
list.Add(42); // correct

IDataReader và Columns
Hãy tưởng tượng bạn đang cố đọc dữ liệu từ cơ sở dữ liệu với mã này:

using (var connection = CreateConnection()) {
    using (var command = connection.CreateCommand()) {
        command.CommandText = "SELECT MyColumn1, MyColumn2 FROM MyTable";

        using (var reader = command.ExecuteReader()) {
            while (reader.Read()) {
                ProcessData(reader.GetString(2)); // Throws!
            }
        }
    }
}

GetString()sẽ ném IndexOutOfRangeExceptionvì tập dữ liệu của bạn chỉ có hai cột nhưng bạn đang cố gắng lấy giá trị từ cột thứ ba (các chỉ số luôn dựa trên 0).

Xin lưu ý rằng hành vi này được chia sẻ với hầu hết các IDataReadertriển khai ( SqlDataReader, OleDbDataReaderv.v.).

Bạn cũng có thể nhận được ngoại lệ tương tự nếu bạn sử dụng quá tải IDataReader của toán tử trình chỉ mục lấy tên cột và chuyển tên cột không hợp lệ.
Ví dụ: giả sử rằng bạn đã truy xuất một cột có tên là Column1 nhưng sau đó bạn cố gắng truy xuất giá trị của trường đó bằng

 var data = dr["Colum1"];  // Missing the n in Column1.

Điều này xảy ra do toán tử chỉ mục được triển khai cố gắng truy xuất chỉ mục của trường Colum1 không tồn tại. Phương thức GetOrdinal sẽ ném ra ngoại lệ này khi mã trình trợ giúp nội bộ của nó trả về giá trị -1 là chỉ mục của "Colum1".

Khác
Có một trường hợp khác (được ghi lại) khi ngoại lệ này được ném ra: nếu, trong DataView, tên cột dữ liệu được cung cấp cho thuộc DataViewSorttính không hợp lệ.

Làm sao để tránh

Trong ví dụ này, hãy để tôi giả sử, để đơn giản, các mảng luôn đơn chiều và dựa trên 0. Nếu bạn muốn nghiêm ngặt (hoặc bạn đang phát triển một thư viện), bạn có thể cần phải thay thế 0bằng GetLowerBound(0).Lengthbằng GetUpperBound(0)(tất nhiên nếu bạn có các tham số kiểu System.Array thì nó không áp dụng cho T[]). Xin lưu ý rằng trong trường hợp này, giới hạn trên bao gồm mã này:

for (int i=0; i < array.Length; ++i) { }

Nên viết lại như thế này:

for (int i=array.GetLowerBound(0); i <= array.GetUpperBound(0); ++i) { }

Xin lưu ý rằng điều này không được phép (nó sẽ ném ra InvalidCastException), đó là lý do tại sao nếu các tham số của T[]bạn là an toàn về mảng giới hạn dưới tùy chỉnh:

void foo<T>(T[] array) { }

void test() {
    // This will throw InvalidCastException, cannot convert Int32[] to Int32[*]
    foo((int)Array.CreateInstance(typeof(int), new int[] { 1 }, new int[] { 1 }));
}

Xác thực tham số
Nếu chỉ mục đến từ một tham số, bạn phải luôn xác thực chúng (ném thích hợp ArgumentExceptionhoặc ArgumentOutOfRangeException). Trong ví dụ tiếp theo, các tham số sai có thể gây ra IndexOutOfRangeException, người dùng hàm này có thể mong đợi điều này vì họ đang truyền một mảng nhưng nó không phải lúc nào cũng rõ ràng như vậy. Tôi khuyên bạn nên luôn xác thực các tham số cho các hàm công khai:

static void SetRange<T>(T[] array, int from, int length, Func<i, T> function)
{
    if (from < 0 || from>= array.Length)
        throw new ArgumentOutOfRangeException("from");

    if (length < 0)
        throw new ArgumentOutOfRangeException("length");

    if (from + length > array.Length)
        throw new ArgumentException("...");

    for (int i=from; i < from + length; ++i)
        array[i] = function(i);
}

Nếu hàm là riêng tư, bạn có thể chỉ cần thay thế iflogic bằng Debug.Assert():

Debug.Assert(from >= 0 && from < array.Length);

Kiểm tra Trạng thái đối tượng
Chỉ mục mảng có thể không đến trực tiếp từ một tham số. Nó có thể là một phần của trạng thái đối tượng. Nói chung, luôn luôn là một thực hành tốt để xác nhận trạng thái đối tượng (bằng chính nó và với các tham số hàm, nếu cần). Bạn có thể sử dụng Debug.Assert(), đưa ra một ngoại lệ thích hợp (mô tả nhiều hơn về vấn đề) hoặc xử lý như trong ví dụ này:

class Table {
    public int SelectedIndex { get; set; }
    public Row[] Rows { get; set; }

    public Row SelectedRow {
        get {
            if (Rows == null)
                throw new InvalidOperationException("...");

            // No or wrong selection, here we just return null for
            // this case (it may be the reason we use this property
            // instead of direct access)
            if (SelectedIndex < 0 || SelectedIndex >= Rows.Length)
                return null;

            return Rows[SelectedIndex];
        }
}

Xác thực giá trị trả về
Trong một trong những ví dụ trước, chúng tôi đã trực tiếp sử dụng Array.IndexOf()giá trị trả về. Nếu chúng tôi biết nó có thể thất bại thì tốt hơn là xử lý trường hợp đó:

int index = myArray[Array.IndexOf(myArray, "Debug");
if (index != -1) { } else { }

Cách gỡ lỗi

Theo tôi, hầu hết các câu hỏi, ở đây trên SO, về lỗi này có thể được tránh một cách đơn giản. Thời gian bạn dành để viết một câu hỏi thích hợp (với một ví dụ làm việc nhỏ và giải thích nhỏ) có thể dễ dàng hơn nhiều so với thời gian bạn cần gỡ lỗi mã của mình. Trước hết, hãy đọc bài đăng trên blog này của Eric Lippert về gỡ lỗi các chương trình nhỏ , tôi sẽ không lặp lại lời nói của anh ấy ở đây nhưng nó hoàn toàn phải đọc .

Bạn có mã nguồn, bạn có thông báo ngoại lệ với dấu vết ngăn xếp. Đến đó, chọn số dòng bên phải và bạn sẽ thấy:

array[index] = newValue;

Bạn đã tìm thấy lỗi của mình, hãy kiểm tra cách indextăng. Đúng không? Kiểm tra xem mảng được phân bổ như thế nào, có mạch lạc với mức indextăng không? Là nó đúng theo thông số kỹ thuật của bạn? Nếu bạn trả lời cho tất cả những câu hỏi này, thì bạn sẽ tìm thấy trợ giúp hữu ích ở đây trên StackOverflow nhưng trước tiên hãy tự mình kiểm tra điều đó. Bạn sẽ tiết kiệm thời gian của riêng bạn!

Điểm khởi đầu tốt là luôn sử dụng các xác nhận và xác thực các đầu vào. Bạn thậm chí có thể muốn sử dụng hợp đồng mã. Khi có sự cố xảy ra và bạn không thể tìm ra điều gì sẽ xảy ra bằng cách xem nhanh mã của mình thì bạn phải nhờ đến một người bạn cũ: trình gỡ lỗi . Chỉ cần chạy ứng dụng của bạn trong gỡ lỗi bên trong Visual Studio (hoặc IDE yêu thích của bạn), bạn sẽ thấy chính xác dòng nào ném ngoại lệ này, mảng nào có liên quan và chỉ mục nào bạn đang cố gắng sử dụng. Thực sự, 99% trường hợp bạn sẽ tự giải quyết nó trong vài phút.

Nếu điều này xảy ra trong quá trình sản xuất thì tốt hơn bạn nên thêm xác nhận vào mã gốc, có thể chúng tôi sẽ không thấy trong mã của bạn những gì bạn không thể nhìn thấy một mình (nhưng bạn luôn có thể đặt cược).

Bên VB.NET của câu chuyện

Mọi thứ mà chúng ta đã nói trong câu trả lời C # đều hợp lệ với VB.NET với sự khác biệt rõ ràng về cú pháp nhưng có một điểm quan trọng cần xem xét khi bạn xử lý mảng VB.NET.

Trong VB.NET, mảng được khai báo thiết lập giá trị chỉ mục hợp lệ lớn nhất cho mảng. Nó không phải là số lượng các phần tử mà chúng ta muốn lưu trữ trong mảng.

' declares an array with space for 5 integer 
' 4 is the maximum valid index starting from 0 to 4
Dim myArray(4) as Integer

Vì vậy, vòng lặp này sẽ lấp đầy mảng với 5 số nguyên mà không gây ra bất kỳ IndexOutOfRangeException nào

For i As Integer = 0 To 4
    myArray(i) = i
Next

Quy tắc VB.NET

Ngoại lệ này có nghĩa là bạn đang cố gắng truy cập một mục bộ sưu tập theo chỉ mục, sử dụng một chỉ mục không hợp lệ. Chỉ mục không hợp lệ khi nó thấp hơn giới hạn dưới của bộ sưu tập hoặc lớn hơnbằng số phần tử mà nó chứa. chỉ số tối đa cho phép được xác định trong khai báo mảng

20
Lijo 2016-03-05 01:22.

Giải thích đơn giản về Chỉ mục ngoài ngoại lệ bị ràng buộc là gì:

Chỉ cần nghĩ một đoàn tàu là có các khoang của nó là D1, D2, D3. Một hành khách bước vào tàu và anh ta có vé D4. bây giờ điều gì sẽ xảy ra. hành khách muốn vào một khoang không tồn tại nên rõ ràng vấn đề sẽ nảy sinh.

Kịch bản tương tự: bất cứ khi nào chúng ta cố gắng truy cập vào danh sách mảng, v.v. chúng ta chỉ có thể truy cập các chỉ mục hiện có trong mảng. array[0]array[1]đang tồn tại. Nếu chúng tôi cố gắng truy cập array[3], nó không thực sự ở đó, vì vậy một chỉ mục nằm ngoài ngoại lệ bị ràng buộc sẽ phát sinh.

10
Snr 2017-12-07 20:48.

Để dễ dàng hiểu vấn đề, hãy tưởng tượng chúng tôi đã viết đoạn mã này:

static void Main(string[] args)
{
    string[] test = new string[3];
    test[0]= "hello1";
    test[1]= "hello2";
    test[2]= "hello3";

    for (int i = 0; i <= 3; i++)
    {
        Console.WriteLine(test[i].ToString());
    }
}

Kết quả sẽ là:

hello1
hello2
hello3

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the bounds of the array.

Kích thước của mảng là 3 (chỉ số 0, 1 và 2), nhưng vòng lặp for lặp lại 4 lần (0, 1, 2 và 3).
Vì vậy, khi nó cố gắng truy cập bên ngoài giới hạn với (3), nó sẽ ném ra ngoại lệ.

1
Ricibob 2019-03-01 22:51.

Một khía cạnh của câu trả lời được chấp nhận hoàn chỉnh rất dài có một điểm quan trọng cần thực hiện IndexOutOfRangeExceptionso với nhiều loại ngoại lệ khác và đó là:

Thường thì có trạng thái chương trình phức tạp mà có thể khó kiểm soát tại một điểm cụ thể trong mã, ví dụ như kết nối DB bị hỏng nên không thể truy xuất dữ liệu cho đầu vào, v.v. Loại vấn đề này thường dẫn đến một Ngoại lệ thuộc một số loại phải bong bóng lên một cấp độ cao hơn bởi vì nó xảy ra ở đâu thì không có cách nào để giải quyết nó tại thời điểm đó.

IndexOutOfRangeExceptionnói chung là khác nhau ở chỗ trong hầu hết các trường hợp, việc kiểm tra tại điểm mà ngoại lệ được nêu ra là khá nhỏ. Nói chung, loại ngoại lệ này bị ném bởi một số mã có thể rất dễ dàng giải quyết vấn đề tại nơi nó đang xảy ra - chỉ bằng cách kiểm tra độ dài thực của mảng. Bạn không muốn 'sửa chữa' điều này bằng cách xử lý ngoại lệ này cao hơn - nhưng thay vào đó bằng cách đảm bảo ngoại lệ không được ném ra trong trường hợp đầu tiên - điều này trong hầu hết các trường hợp rất dễ thực hiện bằng cách kiểm tra độ dài mảng.

Một cách khác để giải thích điều này là các trường hợp ngoại lệ khác có thể phát sinh do sự thiếu kiểm soát thực sự đối với đầu vào hoặc trạng thái chương trình NHƯNG IndexOutOfRangeExceptionthường xuyên hơn không chỉ đơn giản là lỗi thí điểm (lập trình viên).

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Sau khi Sarah Palin tán thành Donald Trump vào đầu tuần này, gần như không thể tránh khỏi việc Tina Fey sẽ trở lại Saturday Night Live để thăm lại ấn tượng Palin cổ điển của cô. Và Fey chắc chắn đã không làm thất vọng, cô ấy đã đưa ra một lời khen ngợi không hề nhẹ về bài phát biểu chứng thực Iowa quanh co và khó hiểu của Palin trong khi Trump của Darrell Hammond đưa ra bình luận xuyên suốt.

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Brittney Griner (r.) Ngay từ đầu, thân phận của Brittney Griner đã là tình huống con tin Mỹ độc nhất trong lịch sử hiện đại.

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Chúng ta có thể thấy nhiều hơn nữa về một Julio Jones khỏe mạnh trong khu vực cuối năm nay. John Parker Wilson, Greg McElroy, A.

Đó phải là Đức

Đó phải là Đức

Đối với đội tuyển Anh, không có kẻ thủ ác nào lớn hơn Hầu hết các cổ động viên Anh, nếu không muốn nói là tất cả, hẳn sẽ phải gật gù khi tiếng còi mãn cuộc của trận bán kết lượt về W Euro 2022 vang lên. Bởi vì nó báo hiệu rằng Đức sẽ chờ đợi ở Wembley trong trận chung kết với Anh và là điều duy nhất giữa Anh và chiếc cúp lớn đầu tiên của đội tuyển nữ.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language