Я пытаюсь преобразовать код C++ в C#, и эта часть моего кода немного сбивает с толку. Мне интересно, помогает ли мне кто-нибудь понять, что он делает, и, возможно, каков его эквивалент в C#.
struct Solution
{
std::vector<double> y;
bool operator<(const Solution& rhs) const
{
if (y < rhs.y)
return true;
return false;
};
}





Код перегружает оператор <, чтобы можно было сравнить два объекта Solution по их значению y.
После такой перегрузки оператора
solution1 < solution2
имеет то же значение, что и
solution1.y < solution2.y
Вы также можете сделать это на C#: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/operator
Я не очень разбираюсь в C++, думаю, эквивалентом vector<double> на C# должен быть List<double> (System.Collections.Generic.List). Я не уверен, как C++ сравнивает два vector<double>, поэтому давайте просто представим, что y в вашем примере - это просто двойник. Это приведет к следующему коду C#:
struct Solution
{
private double y;
public static bool operator <(Solution a, Solution b)
{
return a.y < b.y;
}
public static bool operator >(Solution a, Solution b)
{
return a.y > b.y;
}
}
(Потому что в вы не можете определить оператор < без соответствующего оператора >)
Спасибо за ваш ответ. Должен ли я определять перегрузку или программу создавать ее?
Я не уверен, понял ли я ваш вопрос. Я надеюсь, что редактирование моего ответа поможет.
Это оператор, перегружающий FYI ...