Неявно Принудительный Метод Расширения - PullRequest
2 голосов
/ 29 марта 2011

Я сталкивался со случаем, когда я использую строки left, right и center, но мне приходится каждый раз вызывать для них метод расширения для подавления запятых (когда я говорю «suppress», я на самом деле хочу заключить их в кавычки как это для выхода CSV). Вот базовый пример:

public static string CommaSuppressor(this string str)
{
    return str.Contains(',') ? string.Concat("\"", str.Replace("\"", "\"\""), "\"") : str;
}

Хотя, конечно, скорее всего, есть гораздо более элегантные и эффективные способы сделать это, и я, вероятно, не защитил от крайних случаев, которые, без сомнения, сообщество сообщит мне.

Так что для каждой строки, с которой я когда-либо имел дело, я действительно хочу назвать это на ней. Конечно, с множеством полей везде это означает, что мой код полон myvar.CommaSuppressor().

Может ли кто-нибудь склонить меня в направлении, где CommaSuppressor неявно называется?

Ответы [ 4 ]

4 голосов
/ 29 марта 2011

Я не уверен, что это лучше, но другой подход - написать собственный класс для хранения строки.В конструкторе вы можете иметь дело с запятыми, чтобы при обращении к значению они экранировались, как вы хотите.

1 голос
/ 29 марта 2011

Как насчет подавления запятой только в том месте, где вы выводите строку в csv?

1 голос
/ 29 марта 2011

Нет возможности достичь этого с классом строк по умолчанию. Единственный способ, о котором я могу думать, - это создать класс-оболочку для string, который вызывает этот метод каждый раз, когда он необходим.

1 голос
/ 29 марта 2011

Вы можете создать собственный класс с перегруженным методом ToString ().Вы можете сделать большую настройку, прежде чем вы действительно получите обработанное строковое значение с помощью метода ToString ().Но, конечно, он не будет таким гибким, как оригинальная System.String, конечно

...