Collections Visual C++ .NET

#include "stdafx.h"
using namespace System;
using namespace System::Collections::Generic;
ref class MyClass{
public:
    String^ Value;
    MyClass(String^ in);
    virtual String^ ToString() override;
    static bool hasX(MyClass^ val);
    static void formatString(MyClass^ val);
};
MyClass::MyClass(String^ in) : Value(in) {}
String^ MyClass::ToString() { return Value; }
bool MyClass::hasX(MyClass^ val)
{
    return val->Value->ToUpper()->IndexOf("X") > 0;
}
void MyClass::formatString(MyClass^ val)
{
    val->Value = String::Format("** {0} **", val->Value);
}
void main(){
    List^ alist = gcnew List();
    alist->Add(gcnew MyClass("One"));
    alist->Add(gcnew MyClass("-"));
    alist[1] = gcnew MyClass("Three");
    for (int i = 0; i < alist->Count; i++)
        Console::WriteLine("{0} ", alist[i]);
    List^ x = alist->FindAll(gcnew Predicate(MyClass::hasX));
}