Представьте, что кто-то кодирует следующее:
string s = "SomeString";
s.ToUpper();
Мы все знаем, что в приведенном выше примере вызов метода "ToUpper()" бессмыслен, потому что возвращенная строка не обрабатывается вообще. Но, тем не менее, многие люди делают эту ошибку и тратят время, пытаясь устранить проблему, спросив себя: "Почему неактивны персонажи на моей переменной с заглавной буквы?"
Так было бы здорово, если бы был атрибут, который может быть применен к методу "ToUpper()", который даст ошибку компилятора, если объект возврата не будет обработан? Что-то вроде следующего:
[MustHandleReturnValueAttribute]
public string ToUpper()
{
…
}
Если для корректного компиляции этого кода пользователь должен будет обрабатывать возвращаемое значение следующим образом:
string s = "SomeString";
string uppers = s.ToUpper();
Я думаю, что это сделало бы кристально понятным, что вы должны обрабатывать возвращаемое значение, иначе не будет при вызове этой функции.
В примере с строкой это может быть не очень много, но я могу придумать другие более веские причины, почему это может пригодиться.
Что вы, ребята, думаете?
Спасибо.