Скажем, у меня есть две переменные KeyValuePair.
KeyValuePair<string, double> kv1 = new KeyValuePair<string, double>("a", 5);
KeyValuePair<string, double> kv2 = new KeyValuePair<string, double>("b", 7);
В структуре KeyValuePair нет определения операции +.
Итак, я хочу использовать перегрузку оператора!
Моя цель - получить третью переменную типа KeyValuePair, например:
KeyValuePair<string, double> kv1 = new KeyValuePair<string, double>(kv1.Key + " + " + kv2.Key, kv1.Value + kv2.Value);
И результат будет:
KeyValuePair<string, double>("a + b", 12)
Но подскажите, как это сделать с помощью «оператора»?
Я пытался сделать это так:
public partial class Form1 : Form
{
public Form1()
{
KeyValuePair<string, double> kv1 = new KeyValuePair<string, double>("a", 5);
KeyValuePair<string, double> kv2 = new KeyValuePair<string, double>("b", 7);
KeyValuePair<string, double> k = kv1 + kv2;
}
public static KeyValuePair<string, double> operator +(KeyValuePair<string, double> c1, KeyValuePair<string, double> c2) => new KeyValuePair<string, double>(c1.Key + " + " + c2.Key, c1.Value + c2.Value);
}
Но появляется сообщение об ошибке: «По крайней мере, один из параметров должен быть Form1».
Это означает, что вы можете создать оператор только для входных данных Form.From1 ... Я подумал о расширении класса KeyValuePair!
Но затем я представил, что «KeyValuePair» - это структура, но не класс!
Можем ли мы создать новую структуру, унаследованную от структуры KeyValuePair?
Итак, как это сделать?
Спасибо!
"a" + "b"
произведет"ab"
, а не _3 _... В любом случае, если вы хотите перегрузить оператора, вам придется создать свой собственный тип. Если вы хотите перегрузить оба оператора и использоватьKeyValuePair
, вы можете определить (явное и / или неявное) операторы преобразования, чтобы упростить преобразование между вашим собственным типом иKeyValuePair
. - person Pieter Witvoet   schedule 22.04.2016